<html>

<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=Generator content="Microsoft Word 15 (filtered)">
<title>Corman Lisp 3.0 User Guide</title>
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Helvetica;
	panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
	{font-family:Courier;
	panose-1:2 7 4 9 2 2 5 2 4 4;}
@font-face
	{font-family:"Tms Rmn";
	panose-1:2 2 6 3 4 5 5 2 3 4;}
@font-face
	{font-family:Helv;
	panose-1:2 11 6 4 2 2 2 3 2 4;}
@font-face
	{font-family:"New York";
	panose-1:2 4 5 3 6 5 6 2 3 4;}
@font-face
	{font-family:System;
	panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"MS Mincho";
	panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
	{font-family:Batang;
	panose-1:2 3 6 0 0 1 1 1 1 1;}
@font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:PMingLiU;
	panose-1:2 1 6 1 0 1 1 1 1 1;}
@font-face
	{font-family:"MS Gothic";
	panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
	{font-family:Dotum;
	panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
	{font-family:SimHei;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:MingLiU;
	panose-1:2 1 6 9 0 1 1 1 1 1;}
@font-face
	{font-family:Mincho;
	panose-1:2 2 6 9 4 3 5 8 3 5;}
@font-face
	{font-family:Gulim;
	panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
	{font-family:Century;
	panose-1:2 4 6 4 5 5 5 2 3 4;}
@font-face
	{font-family:"Angsana New";
	panose-1:2 2 6 3 5 4 5 2 3 4;}
@font-face
	{font-family:"Cordia New";
	panose-1:2 11 3 4 2 2 2 2 2 4;}
@font-face
	{font-family:Mangal;
	panose-1:0 0 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:Latha;
	panose-1:2 0 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:Sylfaen;
	panose-1:1 10 5 2 5 3 6 3 3 3;}
@font-face
	{font-family:Vrinda;
	panose-1:0 0 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:Raavi;
	panose-1:2 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:Shruti;
	panose-1:2 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:Sendnya;
	panose-1:0 0 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:Gautami;
	panose-1:2 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:Tunga;
	panose-1:0 0 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Estrangelo Edessa";
	panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:"Yu Gothic";
	panose-1:2 11 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:DengXian;
	panose-1:3 0 5 9 0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:"Calibri Light";
	panose-1:2 15 3 2 2 2 4 3 2 4;}
@font-face
	{font-family:"Palatino Linotype";
	panose-1:2 4 5 2 5 5 5 3 3 4;}
@font-face
	{font-family:Verdana;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"Arial Unicode MS";
	panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
	{font-family:"Segoe UI Emoji";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:Garamond;
	panose-1:2 2 4 4 3 3 1 1 8 3;}
@font-face
	{font-family:Monaco;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"Nachlieli CLM";
	panose-1:2 0 6 3 0 0 0 0 0 0;}
@font-face
	{font-family:"Frank Ruhl Hofshi";
	panose-1:0 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Miriam Libre";
	panose-1:0 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:Marlett;
	panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Arial Black";
	panose-1:2 11 10 4 2 1 2 2 2 4;}
@font-face
	{font-family:"Bahnschrift Light";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift SemiLight";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:Bahnschrift;
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift SemiBold";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift Light SemiCondensed";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift SemiLight SemiConde";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift SemiCondensed";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift SemiBold SemiConden";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift Light Condensed";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift SemiLight Condensed";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift Condensed";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Bahnschrift SemiBold Condensed";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Candara;
	panose-1:2 14 5 2 3 3 3 2 2 4;}
@font-face
	{font-family:"Comic Sans MS";
	panose-1:3 15 7 2 3 3 2 2 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
	{font-family:Constantia;
	panose-1:2 3 6 2 5 3 6 3 3 3;}
@font-face
	{font-family:Corbel;
	panose-1:2 11 5 3 2 2 4 2 2 4;}
@font-face
	{font-family:Ebrima;
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Franklin Gothic Medium";
	panose-1:2 11 6 3 2 1 2 2 2 4;}
@font-face
	{font-family:Gabriola;
	panose-1:4 4 6 5 5 16 2 2 13 2;}
@font-face
	{font-family:Gadugi;
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:Georgia;
	panose-1:2 4 5 2 5 4 5 2 3 3;}
@font-face
	{font-family:Impact;
	panose-1:2 11 8 6 3 9 2 5 2 4;}
@font-face
	{font-family:"Ink Free";
	panose-1:3 8 4 2 0 5 0 0 0 0;}
@font-face
	{font-family:"Javanese Text";
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Leelawadee UI";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Leelawadee UI Semilight";
	panose-1:2 11 4 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Lucida Console";
	panose-1:2 11 6 9 4 5 4 2 2 4;}
@font-face
	{font-family:"Lucida Sans Unicode";
	panose-1:2 11 6 2 3 5 4 2 2 4;}
@font-face
	{font-family:"Malgun Gothic";
	panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
	{font-family:"\@Malgun Gothic";}
@font-face
	{font-family:"Malgun Gothic Semilight";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"\@Malgun Gothic Semilight";}
@font-face
	{font-family:"Microsoft Himalaya";
	panose-1:1 1 1 0 1 1 1 1 1 1;}
@font-face
	{font-family:"Microsoft JhengHei";
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"\@Microsoft JhengHei";}
@font-face
	{font-family:"Microsoft JhengHei UI";
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"\@Microsoft JhengHei UI";}
@font-face
	{font-family:"Microsoft JhengHei Light";
	panose-1:2 11 3 4 3 5 4 4 2 4;}
@font-face
	{font-family:"\@Microsoft JhengHei Light";}
@font-face
	{font-family:"Microsoft JhengHei UI Light";
	panose-1:2 11 3 4 3 5 4 4 2 4;}
@font-face
	{font-family:"\@Microsoft JhengHei UI Light";}
@font-face
	{font-family:"Microsoft New Tai Lue";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Microsoft PhagsPa";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Microsoft Sans Serif";
	panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
	{font-family:"Microsoft Tai Le";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Microsoft YaHei";
	panose-1:2 11 5 3 2 2 4 2 2 4;}
@font-face
	{font-family:"\@Microsoft YaHei";}
@font-face
	{font-family:"Microsoft YaHei UI";
	panose-1:2 11 5 3 2 2 4 2 2 4;}
@font-face
	{font-family:"\@Microsoft YaHei UI";}
@font-face
	{font-family:"Microsoft YaHei Light";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"\@Microsoft YaHei Light";}
@font-face
	{font-family:"Microsoft YaHei UI Light";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"\@Microsoft YaHei UI Light";}
@font-face
	{font-family:"Microsoft Yi Baiti";
	panose-1:3 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:MingLiU-ExtB;
	panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@MingLiU-ExtB";}
@font-face
	{font-family:PMingLiU-ExtB;
	panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@PMingLiU-ExtB";}
@font-face
	{font-family:MingLiU_HKSCS-ExtB;
	panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@MingLiU_HKSCS-ExtB";}
@font-face
	{font-family:"Mongolian Baiti";
	panose-1:3 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@MS Gothic";
	panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
	{font-family:"MS UI Gothic";
	panose-1:2 11 6 0 7 2 5 8 2 4;}
@font-face
	{font-family:"\@MS UI Gothic";}
@font-face
	{font-family:"MS PGothic";
	panose-1:2 11 6 0 7 2 5 8 2 4;}
@font-face
	{font-family:"\@MS PGothic";}
@font-face
	{font-family:"MV Boli";
	panose-1:2 0 5 0 3 2 0 9 0 0;}
@font-face
	{font-family:"Myanmar Text";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Nirmala UI";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Nirmala UI Semilight";
	panose-1:2 11 4 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe MDL2 Assets";
	panose-1:5 10 1 2 1 1 1 1 1 1;}
@font-face
	{font-family:"Segoe Print";
	panose-1:2 0 6 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Segoe Script";
	panose-1:3 11 5 4 2 0 0 0 0 3;}
@font-face
	{font-family:"Segoe UI";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe UI Black";
	panose-1:2 11 10 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe UI Historic";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe UI Light";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe UI Semibold";
	panose-1:2 11 7 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe UI Semilight";
	panose-1:2 11 4 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe UI Symbol";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"\@SimSun";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:NSimSun;
	panose-1:2 1 6 9 3 1 1 1 1 1;}
@font-face
	{font-family:"\@NSimSun";}
@font-face
	{font-family:SimSun-ExtB;
	panose-1:2 1 6 9 6 1 1 1 1 1;}
@font-face
	{font-family:"\@SimSun-ExtB";}
@font-face
	{font-family:"Sitka Small";
	panose-1:2 0 5 5 0 0 0 2 0 4;}
@font-face
	{font-family:"Sitka Text";
	panose-1:2 0 5 5 0 0 0 2 0 4;}
@font-face
	{font-family:"Sitka Subheading";
	panose-1:2 0 5 5 0 0 0 2 0 4;}
@font-face
	{font-family:"Sitka Heading";
	panose-1:2 0 5 5 0 0 0 2 0 4;}
@font-face
	{font-family:"Sitka Display";
	panose-1:2 0 5 5 0 0 0 2 0 4;}
@font-face
	{font-family:"Sitka Banner";
	panose-1:2 0 5 5 0 0 0 2 0 4;}
@font-face
	{font-family:"Trebuchet MS";
	panose-1:2 11 6 3 2 2 2 2 2 4;}
@font-face
	{font-family:Webdings;
	panose-1:5 3 1 2 1 5 9 6 7 3;}
@font-face
	{font-family:"\@Yu Gothic";
	panose-1:2 11 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Yu Gothic UI";
	panose-1:2 11 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@Yu Gothic UI";}
@font-face
	{font-family:"Yu Gothic UI Semibold";
	panose-1:2 11 7 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@Yu Gothic UI Semibold";}
@font-face
	{font-family:"Yu Gothic Light";
	panose-1:2 11 3 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@Yu Gothic Light";}
@font-face
	{font-family:"Yu Gothic UI Light";
	panose-1:2 11 3 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@Yu Gothic UI Light";}
@font-face
	{font-family:"Yu Gothic Medium";
	panose-1:2 11 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@Yu Gothic Medium";}
@font-face
	{font-family:"Yu Gothic UI Semilight";
	panose-1:2 11 4 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@Yu Gothic UI Semilight";}
@font-face
	{font-family:"HoloLens MDL2 Assets";
	panose-1:5 10 1 2 1 1 1 1 1 1;}
@font-face
	{font-family:Arvo;
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Droid Serif";
	panose-1:2 2 6 0 6 5 0 2 2 0;}
@font-face
	{font-family:"Indie Flower";
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:Lobster;
	panose-1:2 0 5 6 0 0 0 2 0 3;}
@font-face
	{font-family:"Poiret One";
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:Raleway;
	panose-1:2 11 0 3 3 1 1 6 0 3;}
@font-face
	{font-family:Roboto;
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Roboto Condensed";
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Roboto Slab";
	panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"\@DengXian";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:"Microsoft MHei";
	panose-1:2 11 4 2 4 2 4 2 2 3;}
@font-face
	{font-family:"\@Microsoft MHei";}
@font-face
	{font-family:"Microsoft NeoGothic";
	panose-1:2 11 4 2 4 2 4 2 2 3;}
@font-face
	{font-family:"\@Microsoft NeoGothic";}
@font-face
	{font-family:"Segoe WP Black";
	panose-1:2 11 10 2 4 5 4 2 2 3;}
@font-face
	{font-family:"Segoe WP";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe WP Semibold";
	panose-1:2 11 7 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe WP Light";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Segoe WP SemiLight";
	panose-1:2 11 4 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Wingdings 2";
	panose-1:5 2 1 2 1 5 7 7 7 7;}
@font-face
	{font-family:"Wingdings 3";
	panose-1:5 4 1 2 1 8 7 7 7 7;}
@font-face
	{font-family:"Tempus Sans ITC";
	panose-1:4 2 4 4 3 13 7 2 2 2;}
@font-face
	{font-family:Mistral;
	panose-1:3 9 7 2 3 4 7 2 4 3;}
@font-face
	{font-family:"Lucida Handwriting";
	panose-1:3 1 1 1 1 1 1 1 1 1;}
@font-face
	{font-family:"Kristen ITC";
	panose-1:3 5 5 2 4 2 2 3 2 2;}
@font-face
	{font-family:"Juice ITC";
	panose-1:4 4 4 3 4 10 2 2 2 2;}
@font-face
	{font-family:"Freestyle Script";
	panose-1:3 8 4 2 3 2 5 11 4 4;}
@font-face
	{font-family:"Arial Narrow";
	panose-1:2 11 6 6 2 2 2 3 2 4;}
@font-face
	{font-family:"Book Antiqua";
	panose-1:2 4 6 2 5 3 5 3 3 4;}
@font-face
	{font-family:"Monotype Corsiva";
	panose-1:3 1 1 1 1 2 1 1 1 1;}
@font-face
	{font-family:"Century Gothic";
	panose-1:2 11 5 2 2 2 2 2 2 4;}
@font-face
	{font-family:Algerian;
	panose-1:4 2 7 5 4 10 2 6 7 2;}
@font-face
	{font-family:"Baskerville Old Face";
	panose-1:2 2 6 2 8 5 5 2 3 3;}
@font-face
	{font-family:"Bauhaus 93";
	panose-1:4 3 9 5 2 11 2 2 12 2;}
@font-face
	{font-family:"Bell MT";
	panose-1:2 2 5 3 6 3 5 2 3 3;}
@font-face
	{font-family:"Berlin Sans FB";
	panose-1:2 14 6 2 2 5 2 2 3 6;}
@font-face
	{font-family:"Bernard MT Condensed";
	panose-1:2 5 8 6 6 9 5 2 4 4;}
@font-face
	{font-family:"Bodoni MT Poster Compressed";
	panose-1:2 7 7 6 8 6 1 5 2 4;}
@font-face
	{font-family:"Britannic Bold";
	panose-1:2 11 9 3 6 7 3 2 2 4;}
@font-face
	{font-family:Broadway;
	panose-1:4 4 9 5 8 11 2 2 5 2;}
@font-face
	{font-family:"Brush Script MT";
	panose-1:3 6 8 2 4 4 6 7 3 4;}
@font-face
	{font-family:"Californian FB";
	panose-1:2 7 4 3 6 8 11 3 2 4;}
@font-face
	{font-family:Centaur;
	panose-1:2 3 5 4 5 2 5 2 3 4;}
@font-face
	{font-family:Chiller;
	panose-1:4 2 4 4 3 16 7 2 6 2;}
@font-face
	{font-family:"Colonna MT";
	panose-1:4 2 8 5 6 2 2 3 2 3;}
@font-face
	{font-family:"Cooper Black";
	panose-1:2 8 9 4 4 3 11 2 4 4;}
@font-face
	{font-family:"Footlight MT Light";
	panose-1:2 4 6 2 6 3 10 2 3 4;}
@font-face
	{font-family:"Harlow Solid Italic";
	panose-1:4 3 6 4 2 15 2 2 13 2;}
@font-face
	{font-family:Harrington;
	panose-1:4 4 5 5 5 10 2 2 7 2;}
@font-face
	{font-family:"High Tower Text";
	panose-1:2 4 5 2 5 5 6 3 3 3;}
@font-face
	{font-family:Jokerman;
	panose-1:4 9 6 5 6 13 6 2 7 2;}
@font-face
	{font-family:"Kunstler Script";
	panose-1:3 3 4 2 2 6 7 13 13 6;}
@font-face
	{font-family:"Lucida Bright";
	panose-1:2 4 6 2 5 5 5 2 3 4;}
@font-face
	{font-family:"Lucida Calligraphy";
	panose-1:3 1 1 1 1 1 1 1 1 1;}
@font-face
	{font-family:"Lucida Fax";
	panose-1:2 6 6 2 5 5 5 2 2 4;}
@font-face
	{font-family:Magneto;
	panose-1:4 3 8 5 5 8 2 2 13 2;}
@font-face
	{font-family:"Matura MT Script Capitals";
	panose-1:3 2 8 2 6 6 2 7 2 2;}
@font-face
	{font-family:"Modern No\. 20";
	panose-1:2 7 7 4 7 5 5 2 3 3;}
@font-face
	{font-family:"Niagara Engraved";
	panose-1:4 2 5 2 7 7 3 3 2 2;}
@font-face
	{font-family:"Niagara Solid";
	panose-1:4 2 5 2 7 7 2 2 2 2;}
@font-face
	{font-family:"Old English Text MT";
	panose-1:3 4 9 2 4 5 8 3 8 6;}
@font-face
	{font-family:Onyx;
	panose-1:4 5 6 2 8 7 2 2 2 3;}
@font-face
	{font-family:Parchment;
	panose-1:3 4 6 2 4 7 8 4 8 4;}
@font-face
	{font-family:Playbill;
	panose-1:4 5 6 3 10 6 2 2 2 2;}
@font-face
	{font-family:"Poor Richard";
	panose-1:2 8 5 2 5 5 5 2 7 2;}
@font-face
	{font-family:Ravie;
	panose-1:4 4 8 5 5 8 9 2 6 2;}
@font-face
	{font-family:"Informal Roman";
	panose-1:3 6 4 2 3 4 6 11 2 4;}
@font-face
	{font-family:"Showcard Gothic";
	panose-1:4 2 9 4 2 1 2 2 6 4;}
@font-face
	{font-family:"Snap ITC";
	panose-1:4 4 10 7 6 10 2 2 2 2;}
@font-face
	{font-family:Stencil;
	panose-1:4 4 9 5 13 8 2 2 4 4;}
@font-face
	{font-family:"Viner Hand ITC";
	panose-1:3 7 5 2 3 5 2 2 2 3;}
@font-face
	{font-family:Vivaldi;
	panose-1:3 2 6 2 5 5 6 9 8 4;}
@font-face
	{font-family:"Vladimir Script";
	panose-1:3 5 4 2 4 4 7 7 3 5;}
@font-face
	{font-family:"Wide Latin";
	panose-1:2 10 10 7 5 5 5 2 4 4;}
@font-face
	{font-family:"Bookman Old Style";
	panose-1:2 5 6 4 5 5 5 2 2 4;}
@font-face
	{font-family:"Berlin Sans FB Demi";
	panose-1:2 14 8 2 2 5 2 2 3 6;}
@font-face
	{font-family:PhoneticTM;
	panose-1:4 1 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"MT Extra";
	panose-1:5 5 1 2 1 2 5 2 2 2;}
@font-face
	{font-family:"Liberation Sans Narrow";
	panose-1:2 11 6 6 2 2 2 3 2 4;}
@font-face
	{font-family:"David Libre";
	panose-1:0 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:Scheherazade;
	panose-1:1 0 6 0 2 0 0 2 0 3;}
@font-face
	{font-family:OpenSymbol;
	panose-1:5 1 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"DejaVu Math TeX Gyre";
	panose-1:2 0 5 3 0 0 0 0 0 0;}
@font-face
	{font-family:"David CLM";
	panose-1:2 0 6 3 0 0 0 0 0 0;}
@font-face
	{font-family:"Noto Kufi Arabic";
	panose-1:2 11 5 6 3 8 4 2 2 4;}
@font-face
	{font-family:Caladea;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Amiri;
	panose-1:0 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"EmojiOne Color";
	panose-1:2 0 5 3 0 0 0 0 0 0;}
@font-face
	{font-family:Alef;
	panose-1:0 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Linux Biolinum G";
	panose-1:2 0 5 3 0 0 0 0 0 0;}
@font-face
	{font-family:KacstBook;
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Source Code Pro Black";
	panose-1:2 11 8 9 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Sans Pro Black";
	panose-1:2 11 8 3 3 4 3 2 2 4;}
@font-face
	{font-family:Carlito;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:"Gentium Basic";
	panose-1:2 0 5 3 6 0 0 2 0 4;}
@font-face
	{font-family:"Reem Kufi Regular";}
@font-face
	{font-family:"Liberation Mono";
	panose-1:2 7 4 9 2 2 5 2 4 4;}
@font-face
	{font-family:"Amiri Quran";
	panose-1:0 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Frank Ruehl CLM";
	panose-1:2 0 6 3 0 0 0 0 0 0;}
@font-face
	{font-family:"Miriam CLM";
	panose-1:2 0 6 3 0 0 0 0 0 0;}
@font-face
	{font-family:"Miriam Mono CLM";
	panose-1:2 0 5 3 0 0 0 0 0 0;}
@font-face
	{font-family:"DejaVu Sans";
	panose-1:2 11 6 3 3 8 4 2 2 4;}
@font-face
	{font-family:"DejaVu Sans Light";
	panose-1:2 11 2 3 3 8 4 2 2 4;}
@font-face
	{font-family:"DejaVu Sans Condensed";
	panose-1:2 11 6 6 3 8 4 2 2 4;}
@font-face
	{font-family:"DejaVu Sans Mono";
	panose-1:2 11 6 9 3 8 4 2 2 4;}
@font-face
	{font-family:"DejaVu Serif";
	panose-1:2 6 6 3 5 6 5 2 2 4;}
@font-face
	{font-family:"DejaVu Serif Condensed";
	panose-1:2 6 6 6 5 6 5 2 2 4;}
@font-face
	{font-family:"Gentium Book Basic";
	panose-1:2 0 5 3 6 0 0 2 0 4;}
@font-face
	{font-family:KacstOffice;
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Liberation Sans";
	panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
	{font-family:"Liberation Serif";
	panose-1:2 2 6 3 5 4 5 2 3 4;}
@font-face
	{font-family:"Linux Libertine Display G";
	panose-1:2 0 5 3 0 0 0 0 0 0;}
@font-face
	{font-family:"Linux Libertine G";
	panose-1:2 0 5 3 0 0 0 0 0 0;}
@font-face
	{font-family:Rubik;
	panose-1:2 0 6 4 0 0 0 2 0 4;}
@font-face
	{font-family:"Noto Mono";
	panose-1:2 11 6 9 3 8 4 2 2 4;}
@font-face
	{font-family:"Noto Naskh Arabic";
	panose-1:2 11 5 2 4 5 4 2 2 4;}
@font-face
	{font-family:"Noto Naskh Arabic UI";
	panose-1:2 11 5 2 4 5 4 2 2 4;}
@font-face
	{font-family:"Noto Sans";}
@font-face
	{font-family:"Noto Sans Cond";}
@font-face
	{font-family:"Noto Sans Light";}
@font-face
	{font-family:"Noto Sans Arabic";}
@font-face
	{font-family:"Noto Sans Arabic UI";}
@font-face
	{font-family:"Noto Sans Armenian";}
@font-face
	{font-family:"Noto Sans Georgian";
	panose-1:2 11 5 2 4 5 4 2 2 4;}
@font-face
	{font-family:"Noto Sans Hebrew";}
@font-face
	{font-family:"Noto Sans Lao";
	panose-1:2 11 5 2 4 5 4 2 2 4;}
@font-face
	{font-family:"Noto Sans Lisu";
	panose-1:2 11 5 2 4 5 4 2 2 4;}
@font-face
	{font-family:"Noto Serif";}
@font-face
	{font-family:"Noto Serif Cond";}
@font-face
	{font-family:"Noto Serif Light";}
@font-face
	{font-family:"Noto Serif Armenian";}
@font-face
	{font-family:"Noto Serif Georgian";
	panose-1:2 2 5 2 6 5 5 2 2 4;}
@font-face
	{font-family:"Noto Serif Hebrew";}
@font-face
	{font-family:"Noto Serif Lao";
	panose-1:2 2 5 2 6 5 5 2 2 4;}
@font-face
	{font-family:"Source Code Pro";
	panose-1:2 11 5 9 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Code Pro ExtraLight";
	panose-1:2 11 3 9 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Code Pro Light";
	panose-1:2 11 4 9 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Code Pro Medium";
	panose-1:2 11 5 9 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Code Pro Semibold";
	panose-1:2 11 6 9 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Sans Pro";
	panose-1:2 11 5 3 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Sans Pro ExtraLight";
	panose-1:2 11 3 3 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Sans Pro Light";
	panose-1:2 11 4 3 3 4 3 2 2 4;}
@font-face
	{font-family:"Source Sans Pro Semibold";
	panose-1:2 11 6 3 3 4 3 2 2 4;}
@font-face
	{font-family:"Agency FB";
	panose-1:2 11 5 3 2 2 2 2 2 4;}
@font-face
	{font-family:"Arial Rounded MT Bold";
	panose-1:2 15 7 4 3 5 4 3 2 4;}
@font-face
	{font-family:"Bodoni MT";
	panose-1:2 7 6 3 8 6 6 2 2 3;}
@font-face
	{font-family:"Bodoni MT Black";
	panose-1:2 7 10 3 8 6 6 2 2 3;}
@font-face
	{font-family:"Bodoni MT Condensed";
	panose-1:2 7 6 6 8 6 6 2 2 3;}
@font-face
	{font-family:"Bradley Hand ITC";
	panose-1:3 7 4 2 5 3 2 3 2 3;}
@font-face
	{font-family:"Bookshelf Symbol 7";
	panose-1:5 1 1 1 1 1 1 1 1 1;}
@font-face
	{font-family:"Calisto MT";
	panose-1:2 4 6 3 5 5 5 3 3 4;}
@font-face
	{font-family:Castellar;
	panose-1:2 10 4 2 6 4 6 1 3 1;}
@font-face
	{font-family:"Century Schoolbook";
	panose-1:2 4 6 4 5 5 5 2 3 4;}
@font-face
	{font-family:"Copperplate Gothic Bold";
	panose-1:2 14 7 5 2 2 6 2 4 4;}
@font-face
	{font-family:"Copperplate Gothic Light";
	panose-1:2 14 5 7 2 2 6 2 4 4;}
@font-face
	{font-family:"Curlz MT";
	panose-1:4 4 4 4 5 7 2 2 2 2;}
@font-face
	{font-family:Dubai;
	panose-1:2 11 5 3 3 4 3 3 2 4;}
@font-face
	{font-family:"Dubai Light";
	panose-1:2 11 3 3 3 4 3 3 2 4;}
@font-face
	{font-family:"Dubai Medium";
	panose-1:2 11 6 3 3 4 3 3 2 4;}
@font-face
	{font-family:Elephant;
	panose-1:2 2 9 4 9 5 5 2 3 3;}
@font-face
	{font-family:"Engravers MT";
	panose-1:2 9 7 7 8 5 5 2 3 4;}
@font-face
	{font-family:"Eras Bold ITC";
	panose-1:2 11 9 7 3 5 4 2 2 4;}
@font-face
	{font-family:"Eras Demi ITC";
	panose-1:2 11 8 5 3 5 4 2 8 4;}
@font-face
	{font-family:"Eras Light ITC";
	panose-1:2 11 4 2 3 5 4 2 8 4;}
@font-face
	{font-family:"Eras Medium ITC";
	panose-1:2 11 6 2 3 5 4 2 8 4;}
@font-face
	{font-family:"Felix Titling";
	panose-1:4 6 5 5 6 2 2 2 10 4;}
@font-face
	{font-family:Forte;
	panose-1:3 6 9 2 4 5 2 7 2 3;}
@font-face
	{font-family:"Franklin Gothic Book";
	panose-1:2 11 5 3 2 1 2 2 2 4;}
@font-face
	{font-family:"Franklin Gothic Demi";
	panose-1:2 11 7 3 2 1 2 2 2 4;}
@font-face
	{font-family:"Franklin Gothic Demi Cond";
	panose-1:2 11 7 6 3 4 2 2 2 4;}
@font-face
	{font-family:"Franklin Gothic Heavy";
	panose-1:2 11 9 3 2 1 2 2 2 4;}
@font-face
	{font-family:"Franklin Gothic Medium Cond";
	panose-1:2 11 6 6 3 4 2 2 2 4;}
@font-face
	{font-family:"French Script MT";
	panose-1:3 2 4 2 4 6 7 4 6 5;}
@font-face
	{font-family:Gigi;
	panose-1:4 4 5 4 6 16 7 2 13 2;}
@font-face
	{font-family:"Gill Sans MT";
	panose-1:2 11 5 2 2 1 4 2 2 3;}
@font-face
	{font-family:"Gill Sans MT Condensed";
	panose-1:2 11 5 6 2 1 4 2 2 3;}
@font-face
	{font-family:"Gill Sans Ultra Bold Condensed";
	panose-1:2 11 10 6 2 1 4 2 2 3;}
@font-face
	{font-family:"Gill Sans Ultra Bold";
	panose-1:2 11 10 2 2 1 4 2 2 3;}
@font-face
	{font-family:"Gloucester MT Extra Condensed";
	panose-1:2 3 8 8 2 6 1 1 1 1;}
@font-face
	{font-family:"Gill Sans MT Ext Condensed Bold";
	panose-1:2 11 9 2 2 1 4 2 2 3;}
@font-face
	{font-family:"Goudy Old Style";
	panose-1:2 2 5 2 5 3 5 2 3 3;}
@font-face
	{font-family:"Goudy Stout";
	panose-1:2 2 9 4 7 3 11 2 4 1;}
@font-face
	{font-family:Haettenschweiler;
	panose-1:2 11 7 6 4 9 2 6 2 4;}
@font-face
	{font-family:"Imprint MT Shadow";
	panose-1:4 2 6 5 6 3 3 3 2 2;}
@font-face
	{font-family:"Blackadder ITC";
	panose-1:4 2 5 5 5 16 7 2 13 2;}
@font-face
	{font-family:"Edwardian Script ITC";
	panose-1:3 3 3 2 4 7 7 13 8 4;}
@font-face
	{font-family:Leelawadee;
	panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
	{font-family:"Lucida Sans";
	panose-1:2 11 6 2 3 5 4 2 2 4;}
@font-face
	{font-family:"Lucida Sans Typewriter";
	panose-1:2 11 5 9 3 5 4 3 2 4;}
@font-face
	{font-family:"Maiandra GD";
	panose-1:2 14 5 2 3 3 8 2 2 4;}
@font-face
	{font-family:"Microsoft Uighur";
	panose-1:2 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"OCR A Extended";
	panose-1:2 1 5 9 2 1 2 1 3 3;}
@font-face
	{font-family:"MS Outlook";
	panose-1:5 1 1 0 1 0 0 0 0 0;}
@font-face
	{font-family:"Palace Script MT";
	panose-1:3 3 3 2 2 6 7 12 11 5;}
@font-face
	{font-family:Papyrus;
	panose-1:3 7 5 2 6 5 2 3 2 5;}
@font-face
	{font-family:Perpetua;
	panose-1:2 2 5 2 6 4 1 2 3 3;}
@font-face
	{font-family:"Perpetua Titling MT";
	panose-1:2 2 5 2 6 5 5 2 8 4;}
@font-face
	{font-family:Pristina;
	panose-1:3 6 4 2 4 4 6 8 2 4;}
@font-face
	{font-family:"Rage Italic";
	panose-1:3 7 5 2 4 5 7 7 3 4;}
@font-face
	{font-family:"MS Reference Sans Serif";
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"MS Reference Specialty";
	panose-1:5 0 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Rockwell Condensed";
	panose-1:2 6 6 3 5 4 5 2 1 4;}
@font-face
	{font-family:Rockwell;
	panose-1:2 6 6 3 2 2 5 2 4 3;}
@font-face
	{font-family:"Rockwell Extra Bold";
	panose-1:2 6 9 3 4 5 5 2 4 3;}
@font-face
	{font-family:"Script MT Bold";
	panose-1:3 4 6 2 4 6 7 8 9 4;}
@font-face
	{font-family:"Tw Cen MT";
	panose-1:2 11 6 2 2 1 4 2 6 3;}
@font-face
	{font-family:"Tw Cen MT Condensed";
	panose-1:2 11 6 6 2 1 4 2 2 3;}
@font-face
	{font-family:"Tw Cen MT Condensed Extra Bold";
	panose-1:2 11 8 3 2 2 2 2 2 4;}
@font-face
	{font-family:Abadi;}
@font-face
	{font-family:"Abadi Extra Light";}
@font-face
	{font-family:Aharoni;}
@font-face
	{font-family:Aldhabi;}
@font-face
	{font-family:AngsanaUPC;}
@font-face
	{font-family:Aparajita;}
@font-face
	{font-family:"Arabic Typesetting";}
@font-face
	{font-family:"Arial Nova";}
@font-face
	{font-family:"Arial Nova Cond";}
@font-face
	{font-family:"Arial Nova Cond Light";}
@font-face
	{font-family:"Arial Nova Light";}
@font-face
	{font-family:BatangChe;}
@font-face
	{font-family:Bembo;}
@font-face
	{font-family:"Browallia New";}
@font-face
	{font-family:BrowalliaUPC;}
@font-face
	{font-family:CordiaUPC;}
@font-face
	{font-family:Dante;}
@font-face
	{font-family:DaunPenh;}
@font-face
	{font-family:David;}
@font-face
	{font-family:"DengXian Light";}
@font-face
	{font-family:DilleniaUPC;}
@font-face
	{font-family:DokChampa;}
@font-face
	{font-family:DotumChe;}
@font-face
	{font-family:EucrosiaUPC;}
@font-face
	{font-family:Euphemia;}
@font-face
	{font-family:FangSong;}
@font-face
	{font-family:FrankRuehl;}
@font-face
	{font-family:FreesiaUPC;}
@font-face
	{font-family:"Georgia Pro";}
@font-face
	{font-family:"Georgia Pro Black";}
@font-face
	{font-family:"Georgia Pro Cond";}
@font-face
	{font-family:"Georgia Pro Cond Black";}
@font-face
	{font-family:"Georgia Pro Cond Light";}
@font-face
	{font-family:"Georgia Pro Cond Semibold";}
@font-face
	{font-family:"Georgia Pro Light";}
@font-face
	{font-family:"Georgia Pro Semibold";}
@font-face
	{font-family:"Gill Sans Nova";}
@font-face
	{font-family:"Gill Sans Nova Cond";}
@font-face
	{font-family:"Gill Sans Nova Cond Lt";}
@font-face
	{font-family:"Gill Sans Nova Cond Ultra Bold";}
@font-face
	{font-family:"Gill Sans Nova Cond XBd";}
@font-face
	{font-family:"Gill Sans Nova Light";}
@font-face
	{font-family:"Gill Sans Nova Ultra Bold";}
@font-face
	{font-family:Gisha;}
@font-face
	{font-family:Grotesque;}
@font-face
	{font-family:"Grotesque Light";}
@font-face
	{font-family:GulimChe;}
@font-face
	{font-family:Gungsuh;}
@font-face
	{font-family:GungsuhChe;}
@font-face
	{font-family:"Hadassah Friedlaender";}
@font-face
	{font-family:HGGothicE;}
@font-face
	{font-family:HGMaruGothicMPRO;}
@font-face
	{font-family:HGMinchoE;}
@font-face
	{font-family:HGPGothicE;}
@font-face
	{font-family:HGPMinchoE;}
@font-face
	{font-family:HGPSoeiKakugothicUB;}
@font-face
	{font-family:HGSGothicE;}
@font-face
	{font-family:HGSMinchoE;}
@font-face
	{font-family:HGSoeiKakugothicUB;}
@font-face
	{font-family:HGSSoeiKakugothicUB;}
@font-face
	{font-family:IrisUPC;}
@font-face
	{font-family:"Iskoola Pota";}
@font-face
	{font-family:JasmineUPC;}
@font-face
	{font-family:KaiTi;}
@font-face
	{font-family:Kalinga;}
@font-face
	{font-family:Kartika;}
@font-face
	{font-family:"Khmer UI";}
@font-face
	{font-family:KodchiangUPC;}
@font-face
	{font-family:Kokila;}
@font-face
	{font-family:"Lao UI";}
@font-face
	{font-family:"Levenim MT";}
@font-face
	{font-family:LilyUPC;}
@font-face
	{font-family:Meiryo;}
@font-face
	{font-family:"Meiryo UI";}
@font-face
	{font-family:"Microsoft GothicNeo";}
@font-face
	{font-family:MingLiU_HKSCS;}
@font-face
	{font-family:Miriam;}
@font-face
	{font-family:"Miriam Fixed";}
@font-face
	{font-family:MoolBoran;}
@font-face
	{font-family:"MS PMincho";}
@font-face
	{font-family:Narkisim;}
@font-face
	{font-family:"Neue Haas Grotesk Text Pro";}
@font-face
	{font-family:"News Gothic MT";}
@font-face
	{font-family:Nyala;}
@font-face
	{font-family:OCRB;}
@font-face
	{font-family:"Plantagenet Cherokee";}
@font-face
	{font-family:"Rockwell Light";}
@font-face
	{font-family:"Rockwell Nova";}
@font-face
	{font-family:"Rockwell Nova Cond";}
@font-face
	{font-family:"Rockwell Nova Cond Light";}
@font-face
	{font-family:"Rockwell Nova Extra Bold";}
@font-face
	{font-family:"Rockwell Nova Light";}
@font-face
	{font-family:Rod;}
@font-face
	{font-family:"Sakkal Majalla";}
@font-face
	{font-family:"Sanskrit Text";}
@font-face
	{font-family:Selawik;}
@font-face
	{font-family:"Selawik Light";}
@font-face
	{font-family:"Selawik Semibold";}
@font-face
	{font-family:"Shonar Bangla";}
@font-face
	{font-family:"Simplified Arabic";}
@font-face
	{font-family:"Simplified Arabic Fixed";}
@font-face
	{font-family:STCaiyun;}
@font-face
	{font-family:STFangsong;}
@font-face
	{font-family:STHupo;}
@font-face
	{font-family:STKaiti;}
@font-face
	{font-family:STXihei;}
@font-face
	{font-family:STXingkai;}
@font-face
	{font-family:STXinwei;}
@font-face
	{font-family:STZhongsong;}
@font-face
	{font-family:"TH SarabunPSK";}
@font-face
	{font-family:"Traditional Arabic";}
@font-face
	{font-family:"UD Digi Kyokasho N-B";}
@font-face
	{font-family:"UD Digi Kyokasho N-R";}
@font-face
	{font-family:"UD Digi Kyokasho NK-B";}
@font-face
	{font-family:"UD Digi Kyokasho NK-R";}
@font-face
	{font-family:"UD Digi Kyokasho NP-B";}
@font-face
	{font-family:"UD Digi Kyokasho NP-R";}
@font-face
	{font-family:Univers;}
@font-face
	{font-family:"Univers Condensed";}
@font-face
	{font-family:"Univers Condensed Light";}
@font-face
	{font-family:"Univers Light";}
@font-face
	{font-family:"Urdu Typesetting";}
@font-face
	{font-family:Utsaah;}
@font-face
	{font-family:Vani;}
@font-face
	{font-family:"Verdana Pro";}
@font-face
	{font-family:"Verdana Pro Black";}
@font-face
	{font-family:"Verdana Pro Cond";}
@font-face
	{font-family:"Verdana Pro Cond Black";}
@font-face
	{font-family:"Verdana Pro Cond Light";}
@font-face
	{font-family:"Verdana Pro Cond SemiBold";}
@font-face
	{font-family:"Verdana Pro Light";}
@font-face
	{font-family:"Verdana Pro SemiBold";}
@font-face
	{font-family:Vijaya;}
@font-face
	{font-family:"Yu Mincho";}
@font-face
	{font-family:"Yu Mincho Demibold";}
@font-face
	{font-family:"Yu Mincho Light";}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
h1
	{margin-top:12.0pt;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:21.6pt;
	text-indent:-21.6pt;
	font-size:24.0pt;
	font-family:"Arial",sans-serif;
	font-weight:bold;}
h2
	{margin-top:6.0pt;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:28.8pt;
	text-indent:-28.8pt;
	page-break-after:avoid;
	font-size:18.0pt;
	font-family:"Arial",sans-serif;
	font-weight:bold;}
h3
	{margin-top:6.0pt;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:36.0pt;
	text-indent:-36.0pt;
	page-break-after:avoid;
	font-size:12.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
h4
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:43.2pt;
	margin-bottom:.0001pt;
	text-indent:-43.2pt;
	page-break-after:avoid;
	font-size:12.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
h5
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:50.4pt;
	margin-bottom:.0001pt;
	text-indent:-50.4pt;
	page-break-after:avoid;
	font-size:10.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
h6
	{margin-top:12.0pt;
	margin-right:0cm;
	margin-bottom:3.0pt;
	margin-left:57.6pt;
	text-indent:-57.6pt;
	font-size:11.0pt;
	font-family:"Times New Roman",serif;
	font-weight:bold;}
p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
	{margin-top:12.0pt;
	margin-right:0cm;
	margin-bottom:3.0pt;
	margin-left:64.8pt;
	text-indent:-64.8pt;
	font-size:12.0pt;
	font-family:"Times New Roman",serif;}
p.MsoHeading8, li.MsoHeading8, div.MsoHeading8
	{margin-top:12.0pt;
	margin-right:0cm;
	margin-bottom:3.0pt;
	margin-left:72.0pt;
	text-indent:-72.0pt;
	font-size:12.0pt;
	font-family:"Times New Roman",serif;
	font-style:italic;}
p.MsoHeading9, li.MsoHeading9, div.MsoHeading9
	{margin-top:12.0pt;
	margin-right:0cm;
	margin-bottom:3.0pt;
	margin-left:79.2pt;
	text-indent:-79.2pt;
	font-size:11.0pt;
	font-family:"Arial",sans-serif;}
p.MsoIndex1, li.MsoIndex1, div.MsoIndex1
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:12.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoIndex2, li.MsoIndex2, div.MsoIndex2
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:24.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoIndex3, li.MsoIndex3, div.MsoIndex3
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoToc1, li.MsoToc1, div.MsoToc1
	{margin-top:6.0pt;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	font-size:10.0pt;
	font-family:"Arial",sans-serif;
	text-transform:uppercase;
	font-weight:bold;}
p.MsoToc2, li.MsoToc2, div.MsoToc2
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:12.0pt;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Arial",sans-serif;
	font-variant:small-caps;}
p.MsoToc3, li.MsoToc3, div.MsoToc3
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:24.0pt;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Garamond",serif;
	font-style:italic;}
p.MsoToc4, li.MsoToc4, div.MsoToc4
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	font-size:9.0pt;
	font-family:"Times New Roman",serif;}
p.MsoToc5, li.MsoToc5, div.MsoToc5
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:48.0pt;
	margin-bottom:.0001pt;
	font-size:9.0pt;
	font-family:"Times New Roman",serif;}
p.MsoToc6, li.MsoToc6, div.MsoToc6
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:60.0pt;
	margin-bottom:.0001pt;
	font-size:9.0pt;
	font-family:"Times New Roman",serif;}
p.MsoToc7, li.MsoToc7, div.MsoToc7
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:72.0pt;
	margin-bottom:.0001pt;
	font-size:9.0pt;
	font-family:"Times New Roman",serif;}
p.MsoToc8, li.MsoToc8, div.MsoToc8
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:84.0pt;
	margin-bottom:.0001pt;
	font-size:9.0pt;
	font-family:"Times New Roman",serif;}
p.MsoToc9, li.MsoToc9, div.MsoToc9
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:96.0pt;
	margin-bottom:.0001pt;
	font-size:9.0pt;
	font-family:"Times New Roman",serif;}
p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Garamond",serif;}
p.MsoHeader, li.MsoHeader, div.MsoHeader
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoFooter, li.MsoFooter, div.MsoFooter
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoIndexHeading, li.MsoIndexHeading, div.MsoIndexHeading
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoCaption, li.MsoCaption, div.MsoCaption
	{margin-top:6.0pt;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	font-size:12.0pt;
	font-family:"Garamond",serif;
	font-style:italic;}
p.MsoEnvelopeAddress, li.MsoEnvelopeAddress, div.MsoEnvelopeAddress
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:144.0pt;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Arial",sans-serif;}
p.MsoEnvelopeReturn, li.MsoEnvelopeReturn, div.MsoEnvelopeReturn
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Arial",sans-serif;}
p.MsoEndnoteText, li.MsoEndnoteText, div.MsoEndnoteText
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Garamond",serif;}
p.MsoList, li.MsoList, div.MsoList
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:18.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoSignature, li.MsoSignature, div.MsoSignature
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:216.0pt;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
	{margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	font-size:9.0pt;
	font-family:Monaco;}
p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
	{margin:0cm;
	margin-bottom:.0001pt;
	text-align:center;
	font-size:36.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;}
p
	{margin-right:0cm;
	margin-left:0cm;
	font-size:12.0pt;
	font-family:"Times New Roman",serif;}
span.WW8Num1z0
	{mso-style-name:WW8Num1z0;}
span.WW8Num2z0
	{mso-style-name:WW8Num2z0;}
span.WW8Num3z0
	{mso-style-name:WW8Num3z0;}
span.WW8Num4z0
	{mso-style-name:WW8Num4z0;}
span.WW8Num5z0
	{mso-style-name:WW8Num5z0;
	font-family:Symbol;}
span.WW8Num6z0
	{mso-style-name:WW8Num6z0;
	font-family:Symbol;}
span.WW8Num7z0
	{mso-style-name:WW8Num7z0;
	font-family:Symbol;}
span.WW8Num8z0
	{mso-style-name:WW8Num8z0;
	font-family:Symbol;}
span.WW8Num9z0
	{mso-style-name:WW8Num9z0;}
span.WW8Num10z0
	{mso-style-name:WW8Num10z0;
	font-family:Symbol;}
span.WW8Num11z0
	{mso-style-name:WW8Num11z0;
	font-family:Symbol;}
span.WW8Num12z0
	{mso-style-name:WW8Num12z0;}
span.WW8Num13z0
	{mso-style-name:WW8Num13z0;
	font-family:Symbol;}
span.WW8Num14z0
	{mso-style-name:WW8Num14z0;}
span.WW8Num14z1
	{mso-style-name:WW8Num14z1;}
span.WW8Num14z2
	{mso-style-name:WW8Num14z2;}
span.WW8Num14z3
	{mso-style-name:WW8Num14z3;}
span.WW8Num14z4
	{mso-style-name:WW8Num14z4;}
span.WW8Num14z5
	{mso-style-name:WW8Num14z5;}
span.WW8Num14z6
	{mso-style-name:WW8Num14z6;}
span.WW8Num14z7
	{mso-style-name:WW8Num14z7;}
span.WW8Num14z8
	{mso-style-name:WW8Num14z8;}
span.WW8Num15z0
	{mso-style-name:WW8Num15z0;
	font-weight:normal;}
span.WW8Num16z0
	{mso-style-name:WW8Num16z0;}
span.WW8Num16z1
	{mso-style-name:WW8Num16z1;}
span.WW8Num16z2
	{mso-style-name:WW8Num16z2;}
span.WW8Num16z3
	{mso-style-name:WW8Num16z3;}
span.WW8Num16z4
	{mso-style-name:WW8Num16z4;}
span.WW8Num16z5
	{mso-style-name:WW8Num16z5;}
span.WW8Num16z6
	{mso-style-name:WW8Num16z6;}
span.WW8Num16z7
	{mso-style-name:WW8Num16z7;}
span.WW8Num16z8
	{mso-style-name:WW8Num16z8;}
span.WW8Num17z0
	{mso-style-name:WW8Num17z0;
	font-family:Symbol;}
span.WW8Num18z0
	{mso-style-name:WW8Num18z0;
	font-family:Symbol;}
span.WW8Num19z0
	{mso-style-name:WW8Num19z0;
	font-family:Symbol;}
span.WW8Num20z0
	{mso-style-name:WW8Num20z0;
	font-family:Symbol;}
span.WW8Num20z1
	{mso-style-name:WW8Num20z1;
	font-family:"Courier New";}
span.WW8Num20z2
	{mso-style-name:WW8Num20z2;
	font-family:Wingdings;}
span.WW8Num21z0
	{mso-style-name:WW8Num21z0;}
span.WW8Num22z0
	{mso-style-name:WW8Num22z0;
	font-family:Symbol;}
span.WW8Num23z0
	{mso-style-name:WW8Num23z0;
	font-family:Symbol;}
span.WW8Num24z0
	{mso-style-name:WW8Num24z0;
	font-weight:normal;}
span.WW8Num25z0
	{mso-style-name:WW8Num25z0;
	font-family:Symbol;}
span.WW8Num26z0
	{mso-style-name:WW8Num26z0;}
span.WW8Num27z0
	{mso-style-name:WW8Num27z0;
	font-family:Symbol;}
span.WW8Num27z1
	{mso-style-name:WW8Num27z1;
	font-family:"Courier New";}
span.WW8Num27z2
	{mso-style-name:WW8Num27z2;
	font-family:Wingdings;}
span.WW8Num28z0
	{mso-style-name:WW8Num28z0;}
span.WW8Num29z0
	{mso-style-name:WW8Num29z0;
	font-family:Symbol;}
span.WW8Num30z0
	{mso-style-name:WW8Num30z0;}
span.WW8Num31z0
	{mso-style-name:WW8Num31z0;
	font-weight:normal;}
span.WW8Num32z0
	{mso-style-name:WW8Num32z0;
	font-family:Symbol;}
span.WW8Num32z1
	{mso-style-name:WW8Num32z1;
	font-family:"Courier New";}
span.WW8Num32z2
	{mso-style-name:WW8Num32z2;
	font-family:Wingdings;}
span.WW8Num33z0
	{mso-style-name:WW8Num33z0;}
span.WW8Num33z1
	{mso-style-name:WW8Num33z1;}
span.WW8Num33z2
	{mso-style-name:WW8Num33z2;}
span.WW8Num33z3
	{mso-style-name:WW8Num33z3;}
span.WW8Num33z4
	{mso-style-name:WW8Num33z4;}
span.WW8Num33z5
	{mso-style-name:WW8Num33z5;}
span.WW8Num33z6
	{mso-style-name:WW8Num33z6;}
span.WW8Num33z7
	{mso-style-name:WW8Num33z7;}
span.WW8Num33z8
	{mso-style-name:WW8Num33z8;}
span.WW8Num34z0
	{mso-style-name:WW8Num34z0;
	font-weight:normal;}
span.WW8Num35z0
	{mso-style-name:WW8Num35z0;
	font-family:Symbol;}
span.WW8Num36z0
	{mso-style-name:WW8Num36z0;
	font-family:Symbol;}
span.a
	{mso-style-name:默认段落字体;}
span.Typewriter
	{mso-style-name:Typewriter;
	font-family:"Courier New";}
span.programsourcenormalChar
	{mso-style-name:"program source normal Char";
	font-family:"Courier New";}
span.2Char
	{mso-style-name:"标题 2 Char";
	font-family:"Arial",sans-serif;
	font-weight:bold;}
span.bodytextChar
	{mso-style-name:"body text Char";
	font-family:"Garamond",serif;}
span.Char
	{mso-style-name:"正文文本 Char";
	font-family:"Garamond",serif;}
span.1Char
	{mso-style-name:"标题 1 Char";
	font-family:"Arial",sans-serif;
	font-weight:bold;}
span.programsourcenormalChar1
	{mso-style-name:"program source normal Char1";
	font-family:"Courier New";}
p.1, li.1, div.1
	{mso-style-name:Заголовок1;
	margin:0cm;
	margin-bottom:.0001pt;
	text-align:center;
	font-size:24.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
p.10, li.10, div.10
	{mso-style-name:Указатель1;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.CLTLChapter, li.CLTLChapter, div.CLTLChapter
	{mso-style-name:"CLTL Chapter";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:18.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
p.programsourcebold, li.programsourcebold, div.programsourcebold
	{mso-style-name:"program source bold";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	font-size:11.0pt;
	font-family:"Courier New";
	font-weight:bold;}
p.bodytext, li.bodytext, div.bodytext
	{mso-style-name:"body text";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.programsourcenormal, li.programsourcenormal, div.programsourcenormal
	{mso-style-name:"program source normal";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Courier New";}
p.4, li.4, div.4
	{mso-style-name:"索引 4";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:48.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.5, li.5, div.5
	{mso-style-name:"索引 5";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:60.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.6, li.6, div.6
	{mso-style-name:"索引 6";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:72.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.7, li.7, div.7
	{mso-style-name:"索引 7";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:84.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.8, li.8, div.8
	{mso-style-name:"索引 8";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:96.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.9, li.9, div.9
	{mso-style-name:"索引 9";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:108.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.2, li.2, div.2
	{mso-style-name:"正文文本缩进 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	text-indent:-36.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.a0, li.a0, div.a0
	{mso-style-name:纯文本;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Courier New";}
p.Preformatted, li.Preformatted, div.Preformatted
	{mso-style-name:Preformatted;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Courier New";}
p.H2, li.H2, div.H2
	{mso-style-name:H2;
	margin-top:5.0pt;
	margin-right:0cm;
	margin-bottom:5.0pt;
	margin-left:0cm;
	page-break-after:avoid;
	font-size:18.0pt;
	font-family:"Times New Roman",serif;
	font-weight:bold;}
p.DefinitionTerm, li.DefinitionTerm, div.DefinitionTerm
	{mso-style-name:"Definition Term";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman",serif;}
p.DefinitionList, li.DefinitionList, div.DefinitionList
	{mso-style-name:"Definition List";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:18.0pt;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman",serif;}
p.H3, li.H3, div.H3
	{mso-style-name:H3;
	margin-top:5.0pt;
	margin-right:0cm;
	margin-bottom:5.0pt;
	margin-left:0cm;
	page-break-after:avoid;
	font-size:14.0pt;
	font-family:"Times New Roman",serif;
	font-weight:bold;}
p.Covertext, li.Covertext, div.Covertext
	{mso-style-name:"Cover text";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	text-align:center;
	page-break-after:avoid;
	font-size:10.0pt;
	font-family:"Arial",sans-serif;}
p.a1, li.a1, div.a1
	{mso-style-name:文本块;
	margin-top:0cm;
	margin-right:72.0pt;
	margin-bottom:6.0pt;
	margin-left:72.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.NumStep, li.NumStep, div.NumStep
	{mso-style-name:"Num Step";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.BulletList, li.BulletList, div.BulletList
	{mso-style-name:"Bullet List";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.NumStepIndent, li.NumStepIndent, div.NumStepIndent
	{mso-style-name:"Num Step Indent";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.FunctionTitle, li.FunctionTitle, div.FunctionTitle
	{mso-style-name:"Function Title";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	text-align:justify;
	font-size:12.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
p.VariableTitle, li.VariableTitle, div.VariableTitle
	{mso-style-name:"Variable Title";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	text-align:justify;
	font-size:12.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
p.Indentprogramsourcenormal, li.Indentprogramsourcenormal, div.Indentprogramsourcenormal
	{mso-style-name:"Indent program source normal";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:18.0pt;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Courier New";}
p.Paramsolo, li.Paramsolo, div.Paramsolo
	{mso-style-name:"Param solo";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:3.0pt;
	margin-left:18.0pt;
	page-break-after:avoid;
	font-size:11.0pt;
	font-family:"Courier New";
	font-style:italic;}
p.TableSource, li.TableSource, div.TableSource
	{mso-style-name:"Table Source";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:7.2pt;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Courier New";}
p.NumStep2, li.NumStep2, div.NumStep2
	{mso-style-name:"Num Step 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.a2, li.a2, div.a2
	{mso-style-name:批注框文本;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:8.0pt;
	font-family:"Tahoma",sans-serif;}
p.20, li.20, div.20
	{mso-style-name:"正文文本 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	line-height:200%;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.3, li.3, div.3
	{mso-style-name:"正文文本 3";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	font-size:8.0pt;
	font-family:"Garamond",serif;}
p.a3, li.a3, div.a3
	{mso-style-name:正文首行缩进;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:0cm;
	text-indent:10.5pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.21, li.21, div.21
	{mso-style-name:"正文首行缩进 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	text-indent:10.5pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.30, li.30, div.30
	{mso-style-name:"正文文本缩进 3";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	font-size:8.0pt;
	font-family:"Garamond",serif;}
p.a4, li.a4, div.a4
	{mso-style-name:题注;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
p.a5, li.a5, div.a5
	{mso-style-name:结束语;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:216.0pt;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.a6, li.a6, div.a6
	{mso-style-name:批注文字;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Garamond",serif;}
p.a7, li.a7, div.a7
	{mso-style-name:批注主题;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
p.a8, li.a8, div.a8
	{mso-style-name:日期;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.a9, li.a9, div.a9
	{mso-style-name:文档结构图;
	margin:0cm;
	margin-bottom:.0001pt;
	background:navy;
	font-size:10.0pt;
	font-family:"Tahoma",sans-serif;}
p.aa, li.aa, div.aa
	{mso-style-name:电子邮件签名;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.HTML, li.HTML, div.HTML
	{mso-style-name:"HTML 地址";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;
	font-style:italic;}
p.HTML0, li.HTML0, div.HTML0
	{mso-style-name:"HTML 预设格式";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Courier New";}
p.22, li.22, div.22
	{mso-style-name:"列表 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.31, li.31, div.31
	{mso-style-name:"列表 3";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:54.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.40, li.40, div.40
	{mso-style-name:"列表 4";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:72.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.50, li.50, div.50
	{mso-style-name:"列表 5";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:90.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.ab, li.ab, div.ab
	{mso-style-name:列表项目符号;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:18.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.23, li.23, div.23
	{mso-style-name:"列表项目符号 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.32, li.32, div.32
	{mso-style-name:"列表项目符号 3";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:54.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.41, li.41, div.41
	{mso-style-name:"列表项目符号 4";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:72.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.51, li.51, div.51
	{mso-style-name:"列表项目符号 5";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:90.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.ac, li.ac, div.ac
	{mso-style-name:列表接续;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.24, li.24, div.24
	{mso-style-name:"列表接续 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:36.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.33, li.33, div.33
	{mso-style-name:"列表接续 3";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:54.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.42, li.42, div.42
	{mso-style-name:"列表接续 4";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:72.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.52, li.52, div.52
	{mso-style-name:"列表接续 5";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:6.0pt;
	margin-left:90.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.ad, li.ad, div.ad
	{mso-style-name:列表编号;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:18.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.25, li.25, div.25
	{mso-style-name:"列表编号 2";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.34, li.34, div.34
	{mso-style-name:"列表编号 3";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:54.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.43, li.43, div.43
	{mso-style-name:"列表编号 4";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:72.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.53, li.53, div.53
	{mso-style-name:"列表编号 5";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:90.0pt;
	margin-bottom:.0001pt;
	text-indent:-18.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.ae, li.ae, div.ae
	{mso-style-name:宏文本;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Courier New";}
p.af, li.af, div.af
	{mso-style-name:信息标题;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:54.0pt;
	margin-bottom:.0001pt;
	text-indent:-54.0pt;
	background:#CCCCCC;
	border:none;
	padding:0cm;
	font-size:12.0pt;
	font-family:"Arial",sans-serif;}
p.af0, li.af0, div.af0
	{mso-style-name:"普通\(网站\)";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman",serif;}
p.af1, li.af1, div.af1
	{mso-style-name:正文缩进;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.af2, li.af2, div.af2
	{mso-style-name:注释标题;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.af3, li.af3, div.af3
	{mso-style-name:称呼;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.af4, li.af4, div.af4
	{mso-style-name:引文目录;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:12.0pt;
	margin-bottom:.0001pt;
	text-indent:-12.0pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.af5, li.af5, div.af5
	{mso-style-name:图表目录;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.af6, li.af6, div.af6
	{mso-style-name:引文目录标题;
	margin-top:6.0pt;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Arial",sans-serif;
	font-weight:bold;}
p.af7, li.af7, div.af7
	{mso-style-name:"Содержимое таблицы";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Garamond",serif;}
p.af8, li.af8, div.af8
	{mso-style-name:"Заголовок таблицы";
	margin:0cm;
	margin-bottom:.0001pt;
	text-align:center;
	font-size:12.0pt;
	font-family:"Garamond",serif;
	font-weight:bold;}
span.msoIns
	{mso-style-name:"";
	text-decoration:underline;
	color:teal;}
span.msoDel
	{mso-style-name:"";
	text-decoration:line-through;
	color:red;}
 /* Page Definitions */
 @page WordSection1
	{size:504.0pt 648.0pt;
	margin:54.0pt 54.0pt 54.0pt 54.0pt;}
div.WordSection1
	{page:WordSection1;}
@page WordSection2
	{size:504.0pt 648.0pt;
	margin:54.0pt 54.0pt 54.0pt 54.0pt;}
div.WordSection2
	{page:WordSection2;}
@page WordSection3
	{size:504.0pt 648.0pt;
	margin:54.0pt 54.0pt 54.0pt 54.0pt;}
div.WordSection3
	{page:WordSection3;}
 /* List Definitions */
 ol
	{margin-bottom:0cm;}
ul
	{margin-bottom:0cm;}
-->
</style>

</head>

<body lang=RU link=blue vlink=purple>

<div class=WordSection1>

<p class=1><span lang=EN-US>&nbsp;</span></p>

<p class=1><span lang=EN-US>&nbsp;</span></p>

<p class=1><span lang=EN-US style='font-family:"Arial",sans-serif'>&nbsp;</span></p>

<p class=MsoSubtitle style='margin-top:12.0pt'><span lang=EN-US
style='font-family:"Arial",sans-serif'>Corman Lisp</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US>Common Lisp
Development Environment</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US style='font-size:
18.0pt'>&nbsp;</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US style='font-size:
14.0pt'>Version 3.1</span></p>

<p class=Covertext style='margin-top:12.0pt;margin-right:0cm;margin-bottom:
0cm;margin-left:0cm;margin-bottom:.0001pt;page-break-after:auto'><span
lang=EN-US style='font-size:26.0pt'>User Guide</span></p>

<p class=Covertext style='margin-left:0cm'><b><span lang=EN-US
style='font-size:22.0pt'>&nbsp;</span></b></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US style='font-size:
14.0pt'>for Windows 32-Bit Operating Systems</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US style='font-size:
18.0pt;font-family:"Helvetica",sans-serif'>&nbsp;</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US style='font-size:
18.0pt;font-family:"Helvetica",sans-serif'>&nbsp;</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US>December 30, 2018</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US>&nbsp;</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US>&nbsp;</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US style='font-size:
12.0pt'>Copyright © Corman Technologies Inc. et al.</span></p>

<p class=Covertext style='margin-left:0cm'><span lang=EN-US>All rights reserved</span><span
lang=EN-US style='font-size:14.0pt'>.</span></p>

</div>

<span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif'><br
clear=all style='page-break-before:always'>
</span>

<div class=WordSection2>

<p class=MsoNormal><b><span lang=EN-US style='font-size:24.0pt'>&nbsp;</span></b></p>

<h1><a name="_Toc533948650"><span lang=EN-US style='font-size:18.0pt'>Contents</span></a></h1>

<p class=MsoToc1><span lang=ru><span class=MsoHyperlink><a href="#_Toc533948650">Contents<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>2</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948651">1 
Introduction<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>7</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948652">2 
Licensing and Copyright Information<span style='color:windowtext;display:none;
text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>10</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948653">3 
How To Reach Us<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>11</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948654">4 
Installing Corman Lisp<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>12</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948655"><span
style='position:relative;top:-3.0pt'>5  Quick Start</span><span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>13</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948656">6 
Files in This Release<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>17</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948657">User
Specific Files and Directories<span style='color:windowtext;display:none;
text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>19</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948658">Source
Code<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>20</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948659">Recompiling
Corman Lisp from Sources<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>22</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948660">7 
Integrated Development Environment (IDE)<span style='color:windowtext;
display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>23</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948661">Misc.
Features<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>24</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948662">Syntax
Coloring<span style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>24</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948663"><span
style='font-family:"Garamond",serif'>Context Menu</span><span style='color:
windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>25</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948664"><span
style='font-family:"Garamond",serif'>Lisp Variables Panel</span><span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>26</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948665">Declarations
Menu<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>26</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948666">Symbols
Menu<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>26</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948667">History
Menu<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>27</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948668">Tooltips<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>27</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948669">Declarations<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>28</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948670">INLINE/NOTINLINE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>29</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948671">DYNAMIC-EXTENT<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>29</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948672">TYPE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>29</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948673">OPTIMIZE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>29</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948674">SPECIAL<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>29</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948675">Technical
Information<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>30</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948676">9 
Assembler<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>31</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948677">DEFASM<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>31</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948678">DEFCODEGEN<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>32</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948679">Mixing
Assembler With Common Lisp Code<span style='color:windowtext;display:none;
text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>32</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948680">DEFASM-MACRO<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>33</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948681">10 
Disassemble<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>34</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948682">11 
Debugging<span style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>35</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948683">DEBUGGER
Commands<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>36</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948684">Debugging
Functions<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>37</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948685">CONS-ADDRESS<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>37</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948686">DISASSEMBLE-BYTES<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>37</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948687">DUMP-BYTES<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>37</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948688">DUMP-DWORDS<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>38</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948689">DUMP-ERROR-STACK<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>39</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948690">FIND-SOURCE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>39</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948691">PEEK-BYTE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>39</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948692">PEEK-DWORD<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>39</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948693">STACK-TRACE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>40</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948694">UVECTOR-ADDRESS<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>40</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948695">12 
Memory Manager<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>41</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948696">Memory
Manager Functions<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>42</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948697">GC<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>42</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948698">MAKE-WEAK-POINTER<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>42</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948699">WEAK-POINTER-P<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>43</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948700">WEAK-POINTER-OBJ<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>43</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948701">REGISTER-FINALIZATION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>43</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948702">ENABLE-HARDWARE-GC<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>43</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948703">HARDWARE-GC-ENABLED-P<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>44</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948704">13
Foreign Function Interface<span style='color:windowtext;display:none;
text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>45</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948705">Foreign
Functions<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>45</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948706">DEFCTYPE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>45</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948707">DEFWINTYPE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>46</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948708">DEFCSTRUCT<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>46</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948709">DEFWINSTRUCT<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>47</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948710">DEFUN-DLL<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>47</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948711">DEFWINAPI<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>48</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948712">CREATE-FOREIGN-PTR<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>48</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948713">SIZEOF<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>48</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948714">CPOINTER-VALUE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>48</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948715">CPOINTERP<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>48</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948716">DEFUN-CALLBACK<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>49</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948717">DEFUN-C-CALLBACK<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>49</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948718">GET-CALLBACK-PROCINST<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>49</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948719">CREF<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>50</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948720">C-STRING-LENGTH<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>50</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948721">CPOINTER=<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>50</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948722">CPOINTER-NULL<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>51</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948723">MEMCMP<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>51</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948724">MALLOC<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>51</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948725">FREE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>52</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948726">FOREIGN-PTR-TO-INT<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>52</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948727">INT-TO-FOREIGN-PTR<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>52</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948728">UNICODE-TO-LISP-STRING<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>52</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948729">LISP-STRING-TO-UNICODE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>53</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948730">C-STRING-TO-LISP-STRING<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>53</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948731">LISP-STRING-TO-C-STRING<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>53</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948732">C Function
Definition Parser<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>54</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948733">Translation
Parameters<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>55</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948734">FFI
Definitions<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>57</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948735">Name
Translation<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>57</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948736">Supported
C Syntax<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>58</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948737">Transcribing
Lisp Files<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>64</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948738">14 
ANSI Common Lisp Compatibility<span style='color:windowtext;display:none;
text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>65</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948739">CLOS<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>66</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948740">15 
Conditions<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>68</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948741">16 
Profiler<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>69</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948742">Profiler
Functions<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>69</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948743">PROFILING<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>69</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948744">17 
Creating Standalone Applications<span style='color:windowtext;display:none;
text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>70</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948745">Application
Functions<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>70</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948746">SAVE-APPLICATION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>70</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948747">18 
Creating DLLs<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>72</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948748">COMPILE-DLL<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>73</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948749">DEFUN-DLL-EXPORT-FUNCTION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>74</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948750">DEFUN-DLL-EXPORT-C-FUNCTION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>74</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948751">Examples<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>75</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948752">DLLSample
Example<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>75</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948753">Building
the DLLClient Example<span style='color:windowtext;display:none;text-decoration:
none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>76</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948754">Multiple
DLLs<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>76</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948755">Limitations<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>76</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948756">Technical
Information<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>77</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948757">19 
DirectCall Interface<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>78</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948758">C/C++ API<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>78</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948759">Initialize<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>78</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948760">BlessThread<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>79</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948761">UnblessThread<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>79</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948762">GetCallbackFunctionPointer<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>79</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948763">Lisp API<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>80</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948764">DEFUN-DIRECT-CALLBACK<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>80</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948765">DEFUN-DIRECT-C-CALLBACK<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>80</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948766">20 
Threads<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>81</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948767">Special
Variables and Threads<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>81</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948768">CREATE-THREAD<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>82</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948769">EXIT-THREAD<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>82</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948770">THREAD-HANDLE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>82</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948771">SUSPEND-THREAD<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>83</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948772">RESUME-THREAD<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>83</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948773">TERMINATE-THREAD<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>83</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948774">*CURRENT-THREAD-ID*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>83</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948775">*CURRENT-THREAD-HANDLE*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>83</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948776">*CURRENT-PROCESS-ID*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>83</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948777">*CURRENT-PROCESS-HANDLE*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>84</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948778">CRITICAL-SECTION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>84</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948779">ALLOCATE-CRITICAL-SECTION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>84</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948780">DEALLOCATE-CRITICAL-SECTION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>84</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948781">ENTER-CRITICAL-SECTION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>85</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948782">LEAVE-CRITICAL-SECTION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>85</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948783">WITH-SYNCHRONIZATION<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>85</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948784">21 
Lisp Data Structures<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>86</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948785">Lisp
Object Functions<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>86</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948786">UREF<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>86</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948787">UVECTORP<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>87</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948788">Type Tags<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>88</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948789">Immediate
Data Types<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>88</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948790">Fixnum<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>88</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948791">Character<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>88</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948792">Short
Float<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>88</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948793">Heap
Object References<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>89</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948794">Cons
Reference<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>89</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948795">Uvector
Reference<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>89</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948796">Extended
Data Types<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>90</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948797">Cons<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>90</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948798">Lisp
Function (closure)<span style='color:windowtext;display:none;text-decoration:
none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>90</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948799">Kernel
Function<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>90</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948800">Structure<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>90</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948801">Array
(adjustable)<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>91</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948802">Symbol<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>91</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948803">Stream<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>92</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948804">Double
Float<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>92</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948805">Package<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>93</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948806">Hash-table<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>93</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948807">Foreign
Pointer<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>93</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948808">Compiled-code
Block<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>94</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948809">Readtable<span
style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>94</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948810">Complex
Number<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>94</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948811">Ratio<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>94</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948812">Bignum<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>95</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948813">Foreign
Heap Pointer<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>95</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948814">Weak
Pointer<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>95</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948815">Simple
Vector<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>95</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948816">Simple
Character Vector<span style='color:windowtext;display:none;text-decoration:
none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>96</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948817">Simple
Byte Vector<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>96</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948818">Simple
Short Vector<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>96</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948819">Simple
Double Float Vector<span style='color:windowtext;display:none;text-decoration:
none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>96</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948820">Simple
Bit Vector<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>97</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948821">Simple
Single Float Vector<span style='color:windowtext;display:none;text-decoration:
none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>97</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948822">Single
Float<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>97</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948823">CLOS
Instance<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>97</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948824">22 
Corman Lisp Extensions<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>98</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948825">Non-standard
Functions and Variables<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>98</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948826">*TOP-LEVEL*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>98</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948827">SAVE-IMAGE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>98</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948828">LOAD-IMAGE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>99</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948829"><span
lang=FR>LOAD-DEFAULT-IMAGE</span><span style='color:windowtext;display:none;
text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>99</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948830">CURRENT-DIRECTORY<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>99</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948831">SETF
CURRENT-DIRECTORY<span style='color:windowtext;display:none;text-decoration:
none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>99</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948832">FUNCTION-ENVIRONMENT<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>99</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948833">*CORMANLISP-DIRECTORY*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>101</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948834">*CORMANLISP-SERVER-DIRECTORY*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>101</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948835">FIND-IN-FILES<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>101</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948836">MACROEXPAND-ALL<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>102</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948837">LISP-SHUTDOWN<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>102</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948838">*USE-EXTERNAL-BROWSER*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>102</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948839">*CORMANLISP-PATCH-LEVEL*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>103</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948840">AUTO-UPDATE<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>103</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948841">PATCH-ROLLB
ACK<span style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>103</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948842">*AUTO-UPDATE-ENABLED*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>104</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948843">*PATCH-ROOT-DIRECTORY*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>104</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948844">*PATCH-SERVER*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>104</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948845">*AUTO-UPDATE-LEVEL*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>104</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948846"><span
lang=FR>COMPILE-CORMANLISP-IMAGE</span><span style='color:windowtext;
display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>105</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948847">MEMORY-REPORT<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>107</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948848">25
Microsoft .NET Integration<span style='color:windowtext;display:none;
text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>108</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948849">*RDNZL-VERSION*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>108</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948850">*RDNZL-PATH*<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>109</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948851">26
Run-time Architecture<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>110</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948852">Register
Usage Conventions<span style='color:windowtext;display:none;text-decoration:
none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>111</span></a></span></span></p>

<p class=MsoToc2><span class=MsoHyperlink><span lang=ru style='font-variant:
normal !important;text-transform:uppercase'><a href="#_Toc533948853">Tagging<span
style='color:windowtext;display:none;text-decoration:none'>.. </span><span
style='color:windowtext;display:none;text-decoration:none'>113</span></a></span></span></p>

<p class=MsoToc3><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948854">Atomic
Operations<span style='color:windowtext;display:none;text-decoration:none'> </span><span
style='color:windowtext;display:none;text-decoration:none'>114</span></a></span></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span lang=ru><a href="#_Toc533948855">Credits<span
style='color:windowtext;display:none;text-decoration:none'>. </span><span
style='color:windowtext;display:none;text-decoration:none'>118</span></a></span></span></p>

<p class=MsoNormal></p>

</div>

<b><span lang=ru style='font-size:18.0pt;font-family:"Calibri",sans-serif;
text-transform:uppercase'><br clear=all style='page-break-before:always'>
</span></b>

<div class=WordSection3>

<h1><a name="_Toc533948651"><span lang=EN-US>1  Introduction</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>This document is intended for use with
Corman Lisp, a Common Lisp development environment for Microsoft Windows
operating systems running on Intel platforms. Corman Lisp consists of a Common
Lisp native code compiler for Intel processors, 80x86 assembler and
disassemble, incremental linker and multi-window text editor. It requires a
system running a Microsoft Windows operating system (such as Windows ME,
Windows XP, or Windows 2000). It is fully integrated with the Win32 API, and
all the Windows API functions are readily available from Lisp.</span></p>

<p class=MsoBodyText><span lang=EN-US>Corman Lisp incorporates state-of-the-art
compiler technology to bring you a Common Lisp system unmatched on Windows
platforms. Among the highlights of Corman Lisp:</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Fast multi-generational garbage collector</span></b><span
lang=EN-US>. A state-of-the-art garbage collector supports extremely fast
collection of short-lived objects, avoiding pauses for collection (which
normally takes only a few milliseconds). The collector also supports compaction
(automatic defragmentation of the heap), weak pointers, finalization functions
and per-thread allocators.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>No interpreter.</span></b><span lang=EN-US>
Code is compiled 100% of the time. It feels like an interpreter, and acts like
one, but always gives you the best possible performance of compiled, optimized
code.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Compilation is extremely fast.</span></b><span
lang=EN-US> The sources to Corman Lisp (consisting of 90 common Lisp source
files and 40,000 lines of code)  load, compile and save to disk in under 10
seconds on a 1 GHz workstation. You can try it yourself if you like (all
sources are included).</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Foreign Function Interface.</span></b><span
lang=EN-US> All functions in DLLs may be called directly from Corman Lisp code,
including all Win32 API functions. Most Win32 data types and many Win32 API
functions come predefined and ready to be used in the WIN32 package. A special
C declaration parser is built-in which allows Win32 C API functions to be used
with little or no modifications (obtained from Microsoft C header files).</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Multi-threading. </span></b><span lang=EN-US>The
compiler has been designed to support multiple threads of execution, with
special variable bindings on a per thread basis. These threads are managed by
the operating system, affording you the full advantage of the features provided
by the operating system. Multiple CPUs are supported, with lisp threads running
simultaneously on multiple processors.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Foreign Callbacks into Lisp. </span></b><span
lang=EN-US>The Foreign Function Interface supports definition of callback
functions which can be used as Windows procedures or for other uses. This
allows straight Win32 SDK applications to be built, exploiting the whole power
of the operating system. These callbacks can be interactively edited and
replaced, even while being used by the operating system or another program.
Several sample programs are included which were translated line by line from C
language programs in Charles Petzold’s <i>Programming Windows 95</i>. These
aren’t intended to demonstrate good Lisp programming style</span><span
lang=EN-US style='font-family:Symbol'>¾</span><span lang=EN-US>rather to show
it can be done.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>CLOS and Metaobject Protocol. </span></b><span
lang=EN-US>The Corman Lisp CLOS implementation is adapted from Art of the
Metaobject Protocol, and allows you to take advantage of object-oriented techniques
where appropriate. It has a MOP (Metaobject Protocol) of great flexibility, and
is very well documented in the book <i>Art of the Metaobject Protocol</i> by
Gregor Kiczales, Jim des Rivières, and Daniel G. Bobrow. This implementation
has been significantly rewritten, enhanced and optimized, with native compiler
support for CLOS instances and method compilation.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Optimizing Compiler. </span></b><span
lang=EN-US>Several key optimizations allow the compiler to generate very fast
code. These include automatic inlining of small commonly used Common Lisp
functions, automatic stack allocation of lexical variables which do not persist
after the function exits, and tail recursion elimination.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Integrated Intel Assembler. </span></b><span
lang=EN-US>Most Intel assembler instructions are supported, and can be used to
do special-purpose tasks from Corman Lisp for which a Lisp function is not
possible. </span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Source Code. </span></b><span lang=EN-US>The
source code for Corman Lisp is included with this release. Most of this source
is in Common Lisp, and self-compiles. The bootstrap kernel code is written in
C/C++, and Intel assembler, and is included with the standard Corman Lisp
release. Complete instructions for rebuilding Corman Lisp from sources are
included with this package.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>COM Server. </span></b><span lang=EN-US>Corman
Lisp is built as an in-process COM server, and can be accessed as such to
increase its flexibility for use in different programming environments. The
included development environment interacts with Corman Lisp exclusively via COM
interfaces. The COM interface information is included in the Corman Lisp
sources in this package. </span></p>

<p class=BulletList style='page-break-before:always'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Integrated Development Environment (IDE). </span></b><span
lang=EN-US>A multi-windowed text editor for editing, compiling and executing
Corman Lisp programs is included. The IDE runs in a different thread than
Corman Lisp programs, always allowing full control even while Corman Lisp is
running. Multiple-level Undo/Redo is now supported.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Common Lisp Hyperspec Support. </span></b><span
lang=EN-US>The ANSI Common Lisp standard, along with much useful accompanying
documentation, has been made available in a package called the Common Lisp
Hyperspec. The is courtesy of Kent Pitman and Xanalys. You may directly browse
the entire Hyperspec from within Corman Lisp, and in addition, all Corman Lisp
symbols are linked to the Hyperspec pages that define them. </span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SAVE-IMAGE</span></b><b><span
lang=EN-US> function.</span></b><span lang=EN-US> The </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-IMAGE</span><span
lang=EN-US> function (as well as its </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>LOAD-IMAGE</span><span lang=EN-US>
counterpart) allow saving the entire Corman Lisp heap to a file, for later
reloading. This capability may be used to build standalone applications which
do not require the presence of the IDE. </span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span></b><b><span
lang=EN-US> function.</span></b><span lang=EN-US> The </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span><span
lang=EN-US> function allows you to build standalone applications with Corman
Lisp which consist of a single .EXE file or (optionally) an .EXE file and a
.DLL file. These can be regular Windows applications, or console applications.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span></b><b><span
lang=EN-US> function.</span></b><span lang=EN-US> The </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US> function allows you to build standard Windows DLLs (dynamic link
libraries) with Corman Lisp. These may be easily linked to other (non-lisp)
applications, or configured for use as plug-ins with applications which
supports plug-ins.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Source Code Management.</span></b><span
lang=EN-US> The compiler remembers the file and line number of every Lisp
function you load. You can use </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>FIND-SOURCE</span><span lang=EN-US> to automatically
bring up the source code for editing.</span></p>

<h1 style='margin-top:12.0pt;margin-right:-27.0pt;margin-bottom:6.0pt;
margin-left:0cm;text-indent:0cm;page-break-before:always'><a
name="_Toc533948652"><span lang=EN-US>2  Licensing and Copyright Information</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>All files provided with the release
package of Corman Lisp are </span></p>

<p class=MsoBodyText><b><span lang=EN-US>Copyright (c) Corman Technologies Inc.</span></b></p>

<p><span lang=EN-US>Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files (the
&quot;Software&quot;), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom
the Software is furnished to do so, subject to the following conditions:</span></p>

<p><span lang=EN-US>The above copyright notice and this permission notice shall
be included in all copies or substantial portions of the Software.</span></p>

<p><span lang=EN-US>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT
WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></p>

<p><span lang=EN-US>&nbsp;</span></p>

<p class=MsoBodyText><span lang=EN-US>(With the exception of several public
source files which are clearly marked as such at the top of each file.)</span></p>

<p class=MsoBodyText style='margin-right:216.0pt'><span lang=EN-US><a
href="http://www.cormanlisp.com/">http://www.cormanlisp.com/</a></span></p>

<p class=MsoBodyText style='margin-right:-.9pt'><b><span lang=EN-US>In January
2015, Roger Corman agreed to release the Corman Lisp sources under the MIT
license. Roger provided the source code for Corman Lisp to Zach, who updated
the license information and posted the code to github:</span></b></p>

<p class=MsoBodyText style='margin-right:-.9pt'><span lang=EN-US><a
href="https://github.com/sharplispers/cormanlisp"><b>https://github.com/sharplispers/cormanlisp</b></a></span></p>

<h1 style='page-break-before:always'><a name="_Toc533948653"><span lang=EN-US>3 
How To Reach Us</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>Any comments or questions may be directed
via e-mail to:  </span></p>

<p class=programsourcebold style='text-indent:36.0pt'><span lang=EN-US><a
href="mailto:admin@cormanlisp.com">mailto:admin@cormanlisp.com</a></span></p>

<p class=MsoBodyText><span lang=EN-US>The Corman Lisp web site is at:</span></p>

<p class=programsourcebold style='text-indent:36.0pt'><span lang=EN-US><a
href="http://www.cormanlisp.com/">http://www.cormanlisp.com/</a></span></p>

<p class=MsoBodyText><span lang=EN-US>The Corman Lisp source code is at:</span></p>

<p class=programsourcebold style='text-indent:36.0pt'><span lang=EN-US><a
href="https://github.com/sharplispers/cormanlisp"><span style='position:relative;
top:-3.0pt'>https://github.com/sharplispers/cormanlisp</span></a></span></p>

<h1 style='page-break-before:always'><a name="_Toc533948654"><span lang=EN-US>4 
Installing Corman Lisp</span></a></h1>

<p class=NumStep><span lang=EN-US>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Double-click on the installation file.</span></p>

<p class=NumStep><span lang=EN-US>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>The setup program will run, and guide you
through the installation process.</span></p>

<p class=NumStep style='margin-left:0cm;text-indent:0cm'><span lang=EN-US>The
installer creates the <b>%CORMANLISP_HOME%</b> environmental variable which
contains the path to the installation directory. It can be used for integrating
Corman Lisp into your project.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948655"><span lang=EN-US
style='position:relative;top:-3.0pt'>5  Quick Start</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>This section is intended to briefly lead
you through writing and running a small Common Lisp program with Corman Lisp.</span></p>

<p class=MsoBodyText><span lang=EN-US>Before starting, look at your keyboard.
You probably have two keys labeled <b>Enter</b>. One of these is typically to
the right of the character keys, and the other is on the numeric keypad. The
Corman Lisp IDE distinguishes between these two keys. We will refer to the one
near the character keys as the <b>Enter</b> key, and the one on the numeric
keypad as the <b>Numeric Enter</b> key. </span></p>

<p class=MsoBodyText><span lang=EN-US>In the Corman Lisp IDE, you can execute
commands by pressing either the <b>Numeric Enter</b> key, or by pressing <b>&lt;Shift&gt;-Enter</b>.
Use whichever works best for you. The non-shifted <b>Enter</b> key is used in
the normal way for text editing i.e. inserting a line break. In the Corman Lisp
IDE, when you press <b>Enter</b>, the system may automatically indent 4 spaces
for each open left parenthesis. We will refer to the <b>Numeric Enter</b> key,
or the <b>&lt;Shift&gt;-Enter</b> key, as the <b>Execute</b> key.</span></p>

<p class=NumStep><span lang=EN-US>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Start Corman Lisp by selecting it from the
Start menu. </span></b></p>

<p class=NumStepIndent><span lang=EN-US>If Corman Lisp has started correctly, a
Worksheet window should appear, and the status bar at the bottom of the main
frame should say Ready.</span></p>

<p class=NumStep><span lang=EN-US>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Enter a Corman Lisp expression. </span></b></p>

<p class=NumStepIndent><span lang=EN-US>Try typing: </span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>(+ 20 30)</span></p>

<p class=NumStepIndent><span lang=EN-US>This command invokes the Common Lisp </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>+</span><span
lang=EN-US> function which returns the sum of the passed arguments. After you
have typed the expression, while your text cursor is still positioned to the
right of the closing parenthesis, note that the opening and closing parentheses
are highlighted. This shows which level of parentheses are matching, and also
designates a Lisp selection. To execute the selected expression, press the <b>Execute</b>
key. </span></p>

<p class=NumStepIndent><span lang=EN-US>All Corman Lisp output is in blue text.
What you type is shows up as normal (black) text.</span></p>

<p class=NumStep style='page-break-before:always'><span lang=EN-US>3.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span
lang=EN-US>Create a Common Lisp function. </span></b></p>

<p class=NumStepIndent><span lang=EN-US>Type:</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>(defun
factorial (x)</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>    </span><span
lang=EN-US>&quot;Returns the factorial of N, where N &gt;= 1&quot;</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>    </span><span
lang=EN-US>(if (= x 1)</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>       
</span><span lang=EN-US>1</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>        </span><span lang=EN-US>(* x (factorial (- x 1)))))</span></p>

<p class=NumStepIndent><span lang=EN-US>While typing this function, use the <b>Enter</b>
key to end each line. </span></p>

<p class=NumStepIndent><span lang=EN-US>After the whole function has been
entered, leave the text cursor positioned just after the last closing
parenthesis. Press <b>Execute</b>. </span></p>

<p class=NumStepIndent><span lang=EN-US>The function </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>FACTORIAL</span><span
lang=EN-US style='font-family:"Courier New"'> </span><span lang=EN-US>has now
been defined. </span></p>

<p class=NumStep><span lang=EN-US>4.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Execute the function. </span></b></p>

<p class=NumStepIndent><span lang=EN-US>Type:</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>(factorial 100)</span></p>

<p class=NumStepIndent><span lang=EN-US>The factorial of 100 is returned (this
is a large number). You can try it with other numbers as well. Try</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'> (factorial 1000)</span><span
lang=EN-US> if you are brave. If you try too big a number, and the system
appears to hang (the editor will still be active, but it will not evaluate
anything you try to execute) try <b>&lt;Control&gt;-Break</b>. This key
combination may always be used to break out of a long computation.</span></p>

<p class=NumStep><span lang=EN-US>5.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Get function documentation. </span></b></p>

<p class=NumStepIndent><span lang=EN-US>Type:</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>(documentation 'factorial 'function)</span></p>

<p class=NumStepIndent><span lang=EN-US>The system will display documentation
that you defined for the function.</span></p>

<p class=NumStep><span lang=EN-US>6.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Time the function. </span></b></p>

<p class=NumStepIndent><span lang=EN-US>Execute:</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>(time (factorial 100))</span></p>

<p class=NumStepIndent><span lang=EN-US>The system will execute the expression
and return the value, as well as print some information regarding execution
time.</span></p>

<p class=NumStep style='page-break-before:always'><span lang=EN-US>7.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span
lang=EN-US>Trace the function.</span></b></p>

<p class=NumStepIndent><span lang=EN-US>Execute:</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>(trace
factorial)</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>(factorial 10)</span></p>

<p class=NumStepIndent><span lang=EN-US>The system will display information
about arguments are returned values for each invocation of function FACTORIAL.</span></p>

<p class=NumStep><span lang=EN-US>8.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Save the function you have defined. </span></b></p>

<p class=NumStepIndent><span lang=EN-US>Select the <b>New</b> command from the <b>File</b>
menu. Name the new file </span><b><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>factorial.lisp</span></b><span lang=EN-US>.</span></p>

<p class=NumStepIndent style='margin-right:-9.0pt'><span lang=EN-US>Select <b>Corman
Lisp Worksheet</b> from the <b>Window</b> menu to return to the worksheet (or
just click on its window). Select the function definition (from step 3) by highlighting
the whole thing. An easy way to do this is to double-click just to the right of
the last closing parenthesis or to the left of the first open parenthesis of
the function definition. Double-clicking here will cause the entire Lisp
expression to be selected. </span></p>

<p class=NumStepIndent><span lang=EN-US>Execute the <b>Copy</b> command via the
<b>Edit</b> menu or pressing </span><b><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>&lt;Control&gt;-C</span></b><span lang=EN-US>.</span></p>

<p class=NumStepIndent><span lang=EN-US>Select the file </span><b><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>factorial.lisp</span></b><span
lang=EN-US> from the <b>Window</b> menu or by clicking on its window. </span></p>

<p class=NumStepIndent><span lang=EN-US>Execute the <b>Paste</b> command via
the <b>Edit</b> menu or pressing </span><b><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>&lt;Control&gt;-V</span></b><span lang=EN-US>.</span></p>

<p class=NumStepIndent><span lang=EN-US>The function definition should be
displayed in the </span><b><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>factorial.lisp</span></b><b><span lang=EN-US> </span></b><span
lang=EN-US>window.</span></p>

<p class=NumStepIndent><span lang=EN-US>Select <b>Save</b> from the <b>File</b>
menu to save the file.</span></p>

<p class=NumStep><span lang=EN-US>9.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Load the new file.</span></b></p>

<p class=NumStepIndent><span lang=EN-US>Choose <b>Execute File…</b> from the <b>File</b>
menu, and select your file </span><b><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>factorial.lisp</span></b><span lang=EN-US
style='font-size:11.0pt'>.</span></p>

<p class=NumStepIndent><span lang=EN-US>This loads the function you defined.
(It was already loaded, but this is for demonstrative purposes.) You can
accomplish the same thing by executing the following expression:</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>(load &quot;factorial.lisp&quot;)</span></p>

<p class=NumStep style='margin-left:22.3pt;text-indent:-22.3pt'><span
lang=EN-US>10.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span><b><span
lang=EN-US>Close the new file.</span></b></p>

<p class=NumStepIndent><span lang=EN-US>You can use <b>Close</b> from the <b>File</b>
menu, or click the window's close box.</span></p>

<p class=NumStep style='margin-left:22.3pt;text-indent:-22.3pt;page-break-before:
always'><span lang=EN-US>11.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</span></span><b><span lang=EN-US>Find the function for editing.</span></b></p>

<p class=NumStepIndent><span lang=EN-US>If you wish to edit any loaded
function, Corman Lisp includes a way to automatically bring up the function for
editing.</span></p>

<p class=NumStepIndent><span lang=EN-US>Execute:</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt;text-indent:18.0pt'><span
lang=EN-US>(db:find-source 'factorial)</span></p>

<p class=NumStepIndent><span lang=EN-US>This should open the file </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>factorial.lisp</span><span
lang=EN-US> in an edit window, and places the text cursor at the beginning of
the </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>FACTORIAL</span><span
lang=EN-US> function.</span></p>

<p class=MsoBodyText style='page-break-after:avoid'><b><span lang=EN-US
style='font-family:"Arial",sans-serif'>Important Notes</span></b></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>You may have any number of files open at once.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>There is no difference between the </span><b><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>Lisp Worksheet </span></b><span
lang=EN-US>and any other file. Every open file may act as a worksheet, in that
Lisp expressions may be executed from them. Lisp output will, however, always
be directed to the file called </span><b><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>Lisp Worksheet</span></b><span lang=EN-US>.
This allows you to easily select and execute portions of your files while you
are editing them without risk that Lisp output will accidentally get saved with
the file.</span></p>

<p class=MsoNormal style='page-break-before:always'><b><span lang=EN-US
style='font-size:24.0pt'>&nbsp;</span></b></p>

<h1><a name="_Toc533948656"><span lang=EN-US>6  Files in This Release</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>When you install Corman Lisp, you
selected an installation directory. We refer to this as the Corman Lisp
directory. There are subdirectories located within this directory, in which
many of the Corman Lisp files are stored.</span></p>

<p class=MsoBodyText><span lang=EN-US>Files located in the Corman Lisp
directory:</span></p>

<p class=programsourcebold><span lang=EN-US>CormanLisp.exe</span></p>

<p class=NumStepIndent><span lang=EN-US>This is the Corman Lisp Integrated
Development Environment (IDE) application. Double click on it to launch Corman
Lisp. </span></p>

<p class=programsourcebold><span lang=EN-US>CormanLispServer.dll</span></p>

<p class=NumStepIndent><span lang=EN-US>The Corman Lisp kernel. It should be
located in the Corman Lisp installation directory. It is a COM server for the
Corman Lisp system, and will be registered as such by your system the first
time you run Corman Lisp.</span></p>

<p class=programsourcebold><span lang=EN-US>CormanLisp.img </span></p>

<p class=NumStepIndent><span lang=EN-US>This contains the remainder of the
Corman Lisp system. It is a Lisp image file, produced by loading the Corman
Lisp system and using </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>SAVE-IMAGE</span><span lang=EN-US>.</span></p>

<p class=programsourcebold><span lang=EN-US>CLConsole.exe </span></p>

<p class=NumStepIndent><span lang=EN-US>This is a simple console application
which allows you to interact with Corman Lisp via a console interface. We
expect you will find the IDE much nicer to use than this. However, this is an
example of how the Corman Lisp COM server may be used to interact with Corman
Lisp from another application. Source (in C++) is provided in the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>clconsole</span><span
lang=EN-US> directory. In addition to being used by itself to run a lisp
console, this file also serves as a template application to generate
console-based applications using </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>SAVE-APPLICATION</span><span lang=EN-US>.</span></p>

<p class=programsourcebold style='page-break-after:avoid'><span lang=EN-US>CLConsoleApp.exe
</span></p>

<p class=NumStepIndent><span lang=EN-US>This file is similar to </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CLConsole.exe</span><span
lang=EN-US>, except that it contains the Corman Lisp kernel (</span><b><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLispServer.dll</span></b><span
lang=EN-US>) linked as a static library. This file serves as a template
application to generate applications using </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span><span
lang=EN-US>.</span></p>

<p class=programsourcebold><span lang=EN-US>CLBoot.exe </span></p>

<p class=NumStepIndent><span lang=EN-US>This is a simple Windows application
which has no user interface. It may be used to load and run a Lisp image, but
the Lisp program must handle all the input and output by itself. This file
serves as a template application to generate applications using </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span><span
lang=EN-US>.</span></p>

<p class=programsourcebold><span lang=EN-US>CLBootApp.exe </span></p>

<p class=NumStepIndent><span lang=EN-US>This file is similar to </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CLBoot.exe</span><span
lang=EN-US>, except that it contains the Corman Lisp kernel (</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLispServer.dll</span><span
lang=EN-US>) linked as a static library. This file serves as a template
application to generate applications using </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span><span
lang=EN-US>, with the standalone option set to true.</span></p>

<p class=programsourcebold><span lang=EN-US>Init.lisp</span></p>

<p class=NumStepIndent><span lang=EN-US>This file always gets executed when the
lisp top level loop starts. This typically is used to customize the console or
IDE by executing lisp expressions at start. It should be noted that this file
gets executed by the every instance of the Corman Lisp on the system. Users are
encouraged to use an user specific <b><i>initialization file</i></b> whenever
possible (see the next section for details).</span></p>

<p class=MsoBodyText><span lang=EN-US>On-line documentation can be found in the
subdirectory called </span><b><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>documentation</span></b><span lang=EN-US>.</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948657"><span lang=EN-US>User
Specific Files and Directories</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>Starting from version 3.1 during its
functioning Corman Lisp IDE creates directory which it uses for its output (e.
g. Lisp image saving, creation of executable, writing crash dumps etc). We will
call this dierctory <b><i>output directory</i></b> in the manual. For console
version of the Corman Lisp <b><i>output directory </i></b>equals to a current
working directory (by default, the directory, from which the executable was
started). In previous versions of the Corman Lisp the above mentioned <b><i>installation
directory</i></b> was used for this facilities. The directory is specific for
every user profile on Windows. Its default location is</span></p>

<p class=programsourcebold><span lang=EN-US>%USERPROFILE%\Documents\Corman
Lisp\</span></p>

<p class=MsoBodyText><span lang=EN-US>or</span></p>

<p class=programsourcebold><span lang=EN-US>%USERPROFILE%\My Documents\Corman
Lisp\</span></p>

<p class=MsoBodyText><span lang=EN-US>on older versions of Windows. This
directory gets created by the Corman Lisp IDE automatically on launch.</span></p>

<p class=programsourcebold><span lang=EN-US>Lisp Worksheet</span></p>

<p class=NumStepIndent><span lang=EN-US>This file normally gets loaded as the
worksheet when you launch Corman Lisp. If you remove or delete this file, a new
one will automatically be created when you restart Corman Lisp. This file is
located in the above mentioned Corman Lisp <b><i>output directory</i></b>. It
is used to be located in the <b><i>installation directory</i></b> in previous
releases.</span></p>

<p class=programsourcebold><span lang=EN-US>%USERPROFILE%\corman-init.lisp</span></p>

<p class=NumStepIndent><span lang=EN-US>This file considered to be an <b><i>initialization
file</i></b>. This file gets executed when the top-level loop starts. It is
very similar by its function to the <b><i>init.lisp</i></b> in the <b><i>installation
directory</i></b> but might be used for user specific customization instead of
system-wide ones. Users of the Corman Lisp are encouraged to use this file
instead of <b><i>init.lisp </i></b>whenever possible.</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948658"><span lang=EN-US>Source
Code</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>All source code to Corman Lisp that is
provided with this release, unless marked otherwise, is copyrighted by Corman
Technologies. It is for non-commercial use only, and it is forbidden to
reproduce it for commercial purposes. The source code may not be modified or
redistributed by anybody except with written permission from the author. Source
code includes all files with the extension </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>.lisp</span><span
lang=EN-US>, </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.cpp</span><span
lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>.h</span><span lang=EN-US>.</span></p>

<p class=MsoBodyText><span lang=EN-US>The source code to Corman Lisp is mainly
written in Common Lisp, and is provided with this release. It can easily be
browsed from within Corman Lisp, either by using the <b>Open...</b> command
from the <b>File</b> menu, or by executing the </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DB:FIND-SOURCE</span><span
lang=EN-US> command. The Common Lisp sources for Corman Lisp are in the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SYS </span><span
lang=EN-US>directory. You should never </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>LOAD</span><span lang=EN-US>
any of these files, as they are loaded in a very order-dependent manner during
the building of Corman Lisp. Additional sources (which are loaded optionally
via </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>REQUIRE</span><span
lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>LOAD</span><span lang=EN-US>, can be found in the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>MODULES </span><span
lang=EN-US>and </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>LIBRARIES</span><span lang=EN-US> directories.</span></p>

<p class=MsoBodyText><span lang=EN-US>The Corman Lisp kernel is written in
C/C++/x86 assembler. It is compiled with Microsoft Visual Studio 2005 (which
handles all three of those languages at once). The kernel source is used to
build the shared DLL named </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>CormanLispServer.dll</span><span lang=EN-US> (which
is an in-process COM server). The kernel code implements the following
functionality:</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>COM Server interface</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Bootstrap Common Lisp code (to start the engine)</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Memory management (including the ephemeral
garbage collector)</span></p>

<p class=BulletList><span lang=DE style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=DE>Code Generation (generating x86 machine code)</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Kernel Library functions</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>GZIP compression (used by </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SAVE-IMAGE</span><span
lang=EN-US>, </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-FILE</span><span
lang=EN-US>).</span></p>

<p class=MsoBodyText><span lang=EN-US>The majority of the kernel library
functions are replaced by functions written in Common Lisp when the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp.img</span><span
lang=EN-US> file is built.</span></p>

<p class=MsoBodyText><span lang=EN-US>The code generation module has hooks to
call Common Lisp code as it compiles each expression and sub-expression.
Eventually most code generation will probably be performed by Common Lisp code
which will implement more advanced compiler optimizations. </span></p>

<p class=MsoBodyText style='page-break-before:always'><span lang=EN-US>We have
no plans to move the memory management functions to Common Lisp, because we see
no need for this and because the nature of the Common Lisp compiled functions
is that they get moved by the garbage collector. The garbage collection code
would have to be handled specially.</span></p>

<p class=MsoBodyText><span lang=EN-US>We expect the COM server interface to be
enriched by Common Lisp code, which will be able to easily create and export
COM interfaces in upcoming versions.</span></p>

<p class=MsoBodyText><span lang=EN-US>We have included the C/C++/x86 sources
for the kernel with this release. This has been compiled with Microsoft Visual
Studio .NET 2002.</span></p>

<p class=MsoBodyText><span lang=EN-US>The source code to the Corman Lisp IDE is
not provided, and we do not plan to make it publicly available at this time.
The CLConsole and CLBoot applications both include source and provide examples
of using Corman Lisp from C++ applications.</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948659"><span lang=EN-US>Recompiling
Corman Lisp from Sources</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>To recompile the CormanLisp system from
Common Lisp sources, perform the following steps:</span></p>

<p class=NumStep><span lang=EN-US>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Optionally backup or rename the file </span><b><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp.img</span></b><span
lang=EN-US> (in the Corman Lisp root directory).</span></p>

<p class=NumStep><span lang=EN-US>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Execute the operator:</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US
style='font-size:10.0pt'>(ccl:compile-cormanlisp-image)</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US
style='font-size:10.0pt'>&nbsp;</span></p>

<p class=MsoBodyText><span lang=EN-US>This operator takes no arguments, and
replaces the file </span><span class=programsourcenormalChar1><span lang=EN-US
style='font-size:10.0pt'>CormanLisp.img</span></span><span lang=EN-US> in the
root install directory.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948660"><span lang=EN-US>7 
Integrated Development Environment (IDE)</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>The Corman Lisp kernel is a COM server
that does not contain a user interface. The Corman Lisp Integrated Development
Environment provides an application which runs the Corman Lisp system, and
integrates several features that are useful for developing Common Lisp
programs.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>A multi-window text editor. There is no
limitation on file size. Color coding, parentheses matching, auto-indenting and
other features are used to assist you in writing Common Lisp source code. You
can set font style, size and color, and tab size.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Debugging facilities.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Interactive function execution.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Status bar.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>HTTP Browser (based on Internet Explorer) can be
used to browse documentation files or anything else, and can be programmed by
Lisp code.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Ability to try out Common Lisp programs by running
them directly from the IDE.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>IDE runs in a separate thread.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Menu items for loading and executing Lisp
programs.</span></p>

<p class=MsoBodyText><span lang=EN-US>The environment provides a <i>worksheet</i>
approach to Common Lisp development. Rather than having a window that emulates
a console (e.g. the <i>Listener</i> in Allegro Common Lisp or LispWorks for
Windows), the worksheet approach does not emulate a console. Any number of text
windows may be open, and any Common Lisp code in any open window may be
executed at any time. The user typically enters a Common Lisp function or
expression, highlights the expression, then presses the <b>Numeric Enter</b>
key. Note that the <b>Numeric Enter</b> key is located on the numeric keypad of
your keyboard, and is labeled the same as the normal Enter key, but for our
purposes it is distinct from the <b>Enter</b> key. The <b>Enter</b> key is used
in the editor to insert a new line. It will not cause the Corman Lisp system to
evaluate any text.</span></p>

<p class=MsoBodyText style='page-break-before:always'><span lang=EN-US>If your
keyboard does not have a <b>Numeric Enter</b> key you may use <b>Shift-Enter</b>,
i.e. hold down the shift key and press the normal <b>Enter</b> key, to get the
same effect as <b>Numeric Enter</b>. You may find this method of executing Lisp
code easier to use. In the rest of this document, we will refer to <b>Numeric
Enter</b>, or <b>Shift-Enter</b>, as the <b>Execute</b> key. </span></p>

<p class=MsoBodyText><span lang=EN-US>Whenever the <b>Execute</b> key is pressed,
Corman Lisp will execute some text from the worksheet or the currently active
text window. To determine which text will be executed:</span></p>

<p class=NumStep><span lang=EN-US>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>If any text is highlighted, that text will be
executed.</span></p>

<p class=NumStep><span lang=EN-US>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>If no text is highlighted, but the vertical bar
cursor is located to the left of a left parenthesis or to the right of a right
parenthesis, you should see a Lisp Selection. This is signified by
corresponding left and right parentheses being underlined and colored red, to
outline the current Lisp selection. Pressing <b>Execute</b> when a Lisp
Selection exists will cause that text to be executed. The text being executed
will momentarily flash to signify that it is being executed.</span></p>

<p class=NumStep><span lang=EN-US>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>If neither of the above rules applies, the
current line of text that contains the cursor will be executed. If it contains
in incomplete Lisp expression, it may generate an error, or it may appear to
hang, as it awaits further input to complete the expression.</span></p>

<h2><a name="_Toc533948661"><span lang=EN-US>Misc. Features</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>Open files, and their window positions,
are now saved when the IDE is exited. They are automatically reopened and
restored to their previous screen positions when the IDE is later restarted.
This behavior may be controlled via the <b>Edit-&gt;Preferences</b> dialog.</span></p>

<p class=MsoBodyText><span lang=EN-US>The full path names of files are now
displayed in the edit window title bars. This may be controlled in the <b>Edit-&gt;Preferences</b>
dialog.</span></p>

<h2><a name="_Toc533948662"><span lang=EN-US>Syntax Coloring</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>Syntax coloring is more stable than in
2.5, and has more capabilities. It is turned on by default, but may be turned
off in the <b>Edit-&gt;Preferences</b> menu. Note that even if you turn off
syntax coloring, you can manually invoke it via the <b>Context</b> menu
(right-click in an edit window).</span></p>

<p class=MsoBodyText style='page-break-before:always'><span lang=EN-US>Files
with the following extensions will support syntax coloring:</span></p>

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-36.0pt'><span
lang=EN-US style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>.<span class=Char>lisp</span></span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>.cl</span></span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>.lis</span></span></p>

<p class=BulletList style='margin-left:0cm;text-indent:0cm'><span class=Char><span
lang=EN-US>The common lisp code which implements the syntax coloring algorithm
may be found in the source file:</span></span></p>

<p class=programsourcenormal style='margin-bottom:5.0pt'><span class=Char><span
lang=EN-US>CormanLisp 3.0/sys/edit-window.lisp</span></span><span class=Char><span
lang=EN-US style='font-size:12.0pt'>It is possible to modify this code to
affect the behavior of the syntax coloring. There are also some variables (such
as the colors used for various types of annotations) which may be modified in this
file or in the startup file </span></span><span class=Char><b><span lang=EN-US>init.lisp</span></b></span><span
class=Char><span lang=EN-US style='font-size:12.0pt'> (recommended).</span></span></p>

<p class=MsoBodyText><span lang=EN-US>You may enable or disable this feature in
the <b>Edit-&gt;Preferences</b> dialog.</span></p>

<h2><a name="_Toc533948663"><span class=Char><span lang=EN-US>Context Menu</span></span></a></h2>

<p class=BulletList style='margin-left:0cm;text-indent:0cm'><span class=Char><span
lang=EN-US>When you use the mouse to right-click on an edit window, a <b>Context</b>
menu pops up. This <b>Context</b> menu contains actions which will act on any
text selected. The code for the <b>Context</b> menu is in the source file:</span></span></p>

<p class=BulletList style='margin-left:0cm;text-indent:0cm'><span class=Char><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp
3.0/sys/context-menu.lisp</span></span></p>

<p class=BulletList style='margin-left:0cm;text-indent:0cm'><span class=Char><span
lang=EN-US>and is easily customizable. In this version, you can perform
operations such as:</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Convert selected text format to
pretty-printed format.</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Macroexpand and pretty-print
the selected expression.</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Make Uppercase.</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Make Lowercase.</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Find the source file and line
of the selected symbol (naming a function).</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Bring up the Hyperspec entry
for a Common Lisp symbol.</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Go to a specific file and line number
(select a line after calling CCL:FIND-IN-FILES).</span></span></p>

<p class=BulletList style='margin-left:36.0pt'><span lang=EN-US
style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span class=Char><span lang=EN-US>Add the selected variable or
expression to the <b>Lisp Variables</b> panel in the toolbar (see below).</span></span></p>

<h2><a name="_Toc533948664"><span class=Char><span lang=EN-US>Lisp Variables
Panel</span></span></a></h2>

<p class=bodytext><span lang=EN-US>By default, the right-hand panel in the
toolbar contains the <b>Lisp Variables</b> panel. This can display an arbitrary
number of Lisp special variable bindings (global level bindings, not thread
re-bindings) and expressions. These are updated once each second. Since
expressions get continuously executed, be careful not to add an expression that
would cause side effects or take a significant amount of time to return. </span></p>

<p class=bodytext><span lang=EN-US>By default, the <b>Lisp Variables</b> panel
contains the current package, CL:*PACKAGE*. To add a variable or expression,
select it and right-click, and select <b>Add to Lisp Variables Panel</b> from
the <b>Context</b> menu.</span></p>

<p class=bodytext><span lang=EN-US>If you wish to add items, you will probably
want to move the panel to another location. If you drag it from the toolbar
onto the main window, it becomes a floating panel which may be resized as
necessary. You can also dock it on the left side of the IDE main windows, where
it will expend to fill the left side of the window vertically.</span></p>

<h2><a name="_Toc533948665"><span lang=EN-US>Declarations Menu</span></a></h2>

<p class=bodytext><span lang=EN-US>The <b>Declarations</b> menu is a dynamic
menu which parses the current Lisp edit window and lists all the declarations
found in that file. The declarations will show up in the menu, and may be
selected by clicking on the associated menu item. This will cause the edit
window to reposition to the selected declaration and highlight the declaration.
The declaration types are listed in the file </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>init.lisp</span><span
lang=EN-US>, and you may modify this list according to your preference.</span></p>

<p class=bodytext><span lang=EN-US>Long menus may be traversed by typing the
first character of the name of the declared object (function, macro, etc.).</span></p>

<h2><a name="_Toc533948666"><span lang=EN-US>Symbols Menu</span></a></h2>

<p class=bodytext><span lang=EN-US>The <b>Symbols</b> menu is a dynamic menu
which contains a dynamic submenu for each package which currently exists in the
system. Each submenu contains an entry which allows the user to switch to that
package (</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>IN-PACKAGE</span><span
lang=EN-US>) and an entry for each external symbol exported by the package.
Gliding over an item causes its tooltip information to be displayed in the
status bar (the bottom of the main window). Selecting a symbol causes the
symbol to be passed to the DESCRIBE operator, and the output of the DESCRIBE
operator is output in the IDE Worksheet.</span></p>

<h2><a name="_Toc533948667"><span lang=EN-US>History Menu</span></a></h2>

<p class=bodytext><span lang=EN-US>This dynamic menu keeps track of recently
executed expressions (executed via the top level Lisp loop) and allows you to
easily view or reselect one of these expressions. Selecting an expression in
the <b>History</b> menu causes the expression to be output to the Lisp Worksheet,
and you may then execute it if you wish.</span></p>

<h2><a name="_Toc533948668"><span lang=EN-US>Tooltips</span></a></h2>

<p class=bodytext><span lang=EN-US>Tooltips are floating boxes that show up
above or below a symbol when you glide over it with the mouse, or when you type
in the symbol with the keyboard. Tooltips are intended to provide some useful
information. The information provided is as follows:</span></p>

<p class=bodytext><span lang=EN-US>If the currently selected or typed symbol is
an external symbol in the Common Lisp package, its lambda list (according to
the standard) is displayed.</span></p>

<p class=bodytext><span lang=EN-US>Otherwise if the symbol names a function,
macro or operator which is not an external Common Lisp symbol, but for which
the system has a known lambda list, the lambda list is displayed. This includes
functions that you may have written, internal system functions, etc. The lambda
list often has descriptive names that help you understand what types of
arguments to pass to the function or macro.</span></p>

<p class=bodytext><span lang=EN-US>Otherwise if the symbol does not name a
function, macro or operators, but does contain a global variable binding, the
current global value of that variable is displayed.</span></p>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

<p class=bodytext style='page-break-before:always'><a
name="__RefHeading___Toc420194138"></a><span class=1Char><span lang=EN-US
style='font-size:24.0pt'>8  Compiler</span></span></p>

<p class=MsoBodyText><span lang=EN-US>The compiler is always invoked by the
evaluator to evaluate any expression. It takes either a lambda expression or a
Lisp object as its input, and returns a function which, when executed, will
effectively evaluate the passed object. If the passed object is a lambda
expression, the compiler will return a compiled function. In the case of a
symbol, the compiler will return a compiled function of no arguments which,
when executed, will return the value of the symbol (or generate an error
message if the symbol has no value). Other Lisp objects will produce a function
which simply returns the object.</span></p>

<p class=MsoBodyText><span lang=EN-US>The compiler may be invoked in the
standard way, via the Common Lisp </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>COMPILE</span><span lang=EN-US> function, but
this is of little value since all functions are always compiled. You may find
it useful to explicitly invoke the internal function </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-FORM</span><span
lang=EN-US>, which will compile any arbitrary form and produce a function
which, when executed, will evaluate that form. The function </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-FORM</span><span
lang=EN-US> is used by the evaluator internally. The function produced may be
examined, using </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>DESCRIBE</span><span lang=EN-US>, or disassembled using </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DISASSEMBLE</span><span
lang=EN-US>. The evaluator essentially is implemented like this:</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt'><span lang=EN-US>(defun
eval (form) (funcall (cl::compile-form form)))</span></p>

<p class=MsoBodyText><span lang=EN-US>The Common Lisp </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-FILE</span><span
lang=EN-US> function is included with Corman Lisp 3.0 and is fully implemented.
Compiled files (with the</span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>. FASL </span><span lang=EN-US>extension) are
usually somewhat smaller and load faster than Common Lisp source files. If you
wish to create compiled code for distribution, you may also use </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SAVE-IMAGE</span><span
lang=EN-US> to create a new Lisp image. </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>LOAD-IMAGE</span><span
lang=EN-US> is typically the fastest way to load and execute compiled lisp code
(although it overwrites any previously loaded files). See the Corman Lisp
extensions section for information about </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-IMAGE</span><span
lang=EN-US> and </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>LOAD-IMAGE</span><span lang=EN-US> functions.</span></p>

<h2><a name="_Toc533948669"><span lang=EN-US>Declarations</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>The compiler was designed to generate
very fast code without compromising safety or debug capabilities. With standard
optimization settings (the defaults i.e. </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SPEED 0</span><span
lang=EN-US>, </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SAFETY
3</span><span lang=EN-US>) you get many speed optimizations and full debug
information. Instead of offering many ways to modify the compiler output, we
have concentrated on trying to provide the best of all worlds at the standard
settings. This includes detailed debug information (which is kept in a very
compact form), argument type checking, and many optimizations which can be done
quickly at compile time and which don’t compromise debugging. </span></p>

<p class=bodytext><span lang=EN-US>We understand that there is value in
providing fine-grained control over compiler output, and we have provided some
capabilities in this area. Look for more compiler options to be implemented in
future versions of Corman Lisp.</span></p>

<h3><a name="_Toc533948670"><span lang=EN-US>INLINE/NOTINLINE</span></a></h3>

<p class=NumStepIndent><span lang=EN-US>If the compiler encounters a </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>PROCLAIM</span><span
lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>DECLAIM</span><span lang=EN-US> form which includes an </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>INLINE</span><span
lang=EN-US> declaration for a given name, that name will be compiled inline
whenever a call to the function is made. This requires that the function
definition is available at the point the call is compiled. </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>INLINE</span><span
lang=EN-US> declarations at lexical scope are not currently supported.</span></p>

<p class=NumStepIndent><span lang=EN-US>A </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>PROCLAIM</span><span
lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>DECLAIM</span><span lang=EN-US> form with a </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>NOTINLINE</span><span
lang=EN-US> declaration will cancel any previously seen </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>INLINE</span><span
lang=EN-US> declaration. Note that </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>NOTINLINE</span><span lang=EN-US> will not
necessarily prevent system functions such as </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CAR</span><span lang=EN-US>
or </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CDR</span><span
lang=EN-US> from being inlined (there is not currently any way to prevent this
automatically).</span></p>

<h3><a name="_Toc533948671"><span lang=EN-US>DYNAMIC-EXTENT</span></a></h3>

<p class=NumStepIndent><span lang=EN-US>If a lambda &amp;rest variable has been
declared locally as having </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DYNAMIC-EXTENT</span><span lang=EN-US>, it will be
created on the stack rather than on the heap. This can make use of </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>&amp;rest</span><span
lang=EN-US> variables more efficient, but can also cause odd problems if you
aren’t very careful.</span></p>

<p class=NumStepIndent><i><span lang=EN-US>Example:</span></i></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>(defun foo (&amp;rest args)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>(declare (dynamic-extent args))</span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:6.0pt'><span
lang=EN-US>    </span><span lang=EN-US>(apply ‘list args))</span></p>

<h3><a name="_Toc533948672"><span lang=EN-US>TYPE</span></a></h3>

<p class=NumStepIndent><span lang=EN-US>In many cases, the compiler will
generate more efficient code if a type is known at compile time. This is
particularly the case when a variable is known to contain a fixnum (small
integer).</span></p>

<h3><a name="_Toc533948673"><span lang=EN-US>OPTIMIZE</span></a></h3>

<p class=NumStepIndent><span lang=EN-US>If the optimize setting for </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SPEED</span><span
lang=EN-US> is high and the optimize setting for </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAFETY</span><span
lang=EN-US> is low, then argument checking will be suppressed in function
prologs.</span></p>

<h3><a name="_Toc533948674"><span lang=EN-US>SPECIAL</span></a></h3>

<p class=NumStepIndent><span lang=EN-US>This is implemented according to the
ANSI standard.</span></p>

<h2><a name="_Toc533948675"><span lang=EN-US>Technical Information</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>The compiler, when passed a lambda
expression to be compiled, first examines the entire expression. If any macros
are encountered, in an unquoted list, the macro expansion functions are called
(repeatedly if necessary) until no macro calls remain. The compiler also looks
for lambda expressions which are defined inside another lambda (and which may
persist past the end of execution of the outer lambda) and looks for local
variables which may be captured when the inner lambda closures are created at
run time. </span></p>

<p class=MsoBodyText><span lang=EN-US>Code is generated, incorporating several
optimizations. A number of Common Lisp functions are always inlined, such as </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CONS, EQ, =,
&lt;, &gt;, +, -, CAR, CDR</span><span lang=EN-US>, etc. In addition, only
those local variables which may possibly persist past the exit of the function
call are included in the function environment. Other local variables are
stack-allocated (or register allocated) only. This accounts for the vast
majority of local variables in typical programs, and makes performance very
good. When variables are captured by the environment, the generated code keeps
the environment pointer in a register, making environment accesses nearly as
fast as stack accesses.</span></p>

<p class=MsoBodyText><span lang=EN-US>The compiler may be extended using </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFCODEGEN</span><span
lang=EN-US>. Whenever the compiler is about to compile an expression, it checks
for a hook to a special code generation function. This may be used to extend
the compiler behavior and implement things like special forms. See examples
which use </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFCODEGEN</span><span
lang=EN-US> for information about usage.</span></p>

<p class=MsoBodyText><span lang=EN-US>The compiler recognizes embedded
assembler statements which use a special non-Lisp syntax. These may be used to
access specific registers or do something that would otherwise not be possible
in Common Lisp. You need to have a pretty deep understanding what you are doing
before you make much use of this feature however. You may browse the Corman
Lisp sources for examples of using inline assembler.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948676"><span lang=EN-US>9 
Assembler</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>There are times you need to use
assembler, and nothing else will do. Most powerful programming language
implementations include some way to hook into the power of the machine, and
Corman Lisp is no exception. Several ways of embedding assembler instructions
in your code are supported.</span></p>

<p class=MsoBodyText><span lang=EN-US>The following example shows how to create
an entire function in assembler. There are many more examples of this in the
Corman Lisp source file </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>kernel-asm.lisp</span><span lang=EN-US>. To use
assembler, you must understand the way Lisp objects are tagged (see the section
on Lisp Data Structures).</span></p>

<h2><a name="_Toc533948677"><span lang=EN-US>DEFASM</span></a></h2>

<p class=bodytext><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>;;;;</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>;;;;  Common
Lisp IDENTITY function.</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>;;;;</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>(defasm
identity (obj)</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>    </span><span
lang=EN-US style='font-size:10.0pt'>{</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>push    ebp                ;; maintain
stack frame </span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>mov     ebp, esp           ;; maintain
stack frame</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>cmp     ecx, 1             ;; number of
args = 1?</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>je      short :next        ;; if yes,
branch</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>callp   _wrong-number-of-args-error ;; else
error</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>    </span><span
lang=EN-US style='font-size:10.0pt'>:next</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>mov     eax, [ebp + ARGS_OFFSET]   ;; eax =
first arg</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>mov     ecx, 1                     ;;
returning 1 value</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>pop     ebp                        ;;
maintain stack frame</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>ret</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>    </span><span
lang=EN-US style='font-size:10.0pt'>})</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948678"><span lang=EN-US>DEFCODEGEN</span></a></h2>

<p class=bodytext><span lang=EN-US>Another use of assembler is to define
special code generation code for the compiler, using </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEFCODEGEN</span><span
lang=EN-US>.</span></p>

<p class=bodytext><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>(defcodegen
call-com-method (form dest)</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>    </span><span
lang=EN-US style='font-size:10.0pt'>(let* ((vtable-index (cadr form)))</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>          
</span><span lang=EN-US style='font-size:10.0pt'>(parse-assembler</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>           
</span><span lang=EN-US style='font-size:10.0pt'>{</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>               
</span><span lang=EN-US style='font-size:10.0pt'>mov eax, [esp]          ;; eax
-&gt; interface</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>               
</span><span lang=EN-US style='font-size:10.0pt'>mov eax, [eax]          ;; eax
-&gt; vtable</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>               
</span><span lang=EN-US style='font-size:10.0pt'>call [eax + (* 4
vtable-index)]</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>           
</span><span lang=EN-US style='font-size:10.0pt'>})))</span></p>

<h2><a name="_Toc533948679"><span lang=EN-US>Mixing Assembler With Common Lisp
Code</span></a></h2>

<p class=bodytext><span lang=EN-US>A third method of embedding assembler into
source code allows you to mix Lisp source and assembly code. Note the double
curly braces surrounding the embedded assembly code.</span></p>

<p class=bodytext><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal><span lang=EN-US>(defun foo (x)</span></p>

<p class=programsourcenormal><span lang=EN-US>    </span><span lang=EN-US>(format
t &quot;Called foo...&quot;)</span></p>

<p class=programsourcenormal><span lang=EN-US>    </span><span lang=EN-US>{{</span></p>

<p class=programsourcenormal><span lang=EN-US>        </span><span lang=EN-US>mov   
eax, [ebp + ARGS_OFFSET]</span></p>

<p class=programsourcenormal><span lang=EN-US>        </span><span lang=EN-US>mov   
ecx, 1</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt'><span lang=EN-US>    </span><span
lang=EN-US>}})</span></p>

<p class=bodytext><span lang=EN-US>Some assembler operators are not yet
implemented, and not all addressing modes are supported. Only 8-bit and 32-bit
operations are supported for most instructions, with </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>MOV</span><span lang=EN-US>
as the notable exception. You can browse the assembler source code (operators
are defined with </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>DEFOP</span><span lang=EN-US>) to see which operators are
available.</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948680"><span lang=EN-US>DEFASM-MACRO</span></a></h2>

<p class=bodytext><span lang=EN-US>Assembler macros are supported via </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFASM-MACRO</span><span
lang=EN-US> (in the X86 package).</span></p>

<p class=bodytext><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>(defasm-macro
callf (sym)</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>    </span><span
lang=EN-US style='font-size:10.0pt'>(let* ((env-offset (* (uref sym
symbol-jump-table-offset) 4))</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>          
</span><span lang=EN-US style='font-size:10.0pt'>(jump-offset    (+ env-offset
4)))</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>(if (zerop env-offset)</span></p>

<p class=programsourcenormal style='margin-right:-18.0pt'><span lang=EN-US
style='font-size:10.0pt'>             </span><span lang=EN-US style='font-size:
10.0pt;letter-spacing:-1.0pt'>(error &quot;The function ~A does not have a jump
table offset&quot; sym))</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=IT style='font-size:10.0pt'>{</span></p>

<p class=programsourcenormal><span lang=IT style='font-size:10.0pt'>           </span><span
lang=IT style='font-size:10.0pt'>mov  edi, [esi + env-offset]</span></p>

<p class=programsourcenormal><span lang=IT style='font-size:10.0pt'>           </span><span
lang=EN-US style='font-size:10.0pt'>call [esi + jump-offset]</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>        </span><span
lang=EN-US style='font-size:10.0pt'>}))</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:Courier'>&nbsp;</span></p>

<p class=bodytext><span lang=EN-US style='font-size:10.0pt;font-family:Courier'>&nbsp;</span></p>

<p class=MsoNormal><b><span lang=EN-US style='font-size:18.0pt;position:relative;
top:-3.0pt'>&nbsp;</span></b></p>

<h1 style='page-break-before:always'><a name="_Toc533948681"><span lang=EN-US>10 
Disassemble</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>A full Intel disassemble is included in
Corman Lisp. You can disassemble any Corman Lisp function via the Common Lisp </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DISASSEMBLE</span><span
lang=EN-US> function. Alternatively, you can disassemble bytes from any region
of memory using the </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>DB:DISASSEMBLE-BYTES</span><span lang=EN-US> function (</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span><span
lang=EN-US> package).</span></p>

<p class=MsoBodyText><span lang=EN-US>The disassemble does not currently
display any symbolic information, so it can be difficult to determine what
functions are being called or variables are being referenced by disassembled
code.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948682"><span lang=EN-US>11 
Debugging</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>Corman Lisp now includes a modal
debugger—that is, a debugger loop that you can enter and do things which you
can’t do at the top level. Errors and calls to </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>BREAK</span><span
lang=EN-US> usually drop you into this debugger loop.</span></p>

<p class=MsoBodyText><span lang=EN-US>When in the debug loop, many keyword
symbols have special meanings as debugger commands. You can execute the symbol </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>:?</span><span
lang=EN-US> at any time while in the debug loop to display a complete list of
debugger commends.</span></p>

<p class=MsoBodyText><span lang=EN-US>While in the debug loop, at any given
time a particular stack frame is considered active. Commands in the debugger
allow you to move to a different stack frame, and to display the contents of
all the variables in the current frame. In addition, while a frame is current,
any lisp expressions you evaluate will implicitly refer to local variables in
that frame, which means you can programmatically read and set these variables
while in the debug loop.</span></p>

<p class=MsoBodyText><span lang=EN-US>You should be careful not to create
persistent functions (such as with </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>DEFUN</span><span lang=EN-US>) while in the
debug loop, because you could inadvertently capture a local stack frame
variable in the compiled function. If you later try to execute that function
(after the stack frame is no longer valid) you would get unexpected (and
potentially serious) results.</span></p>

<p class=MsoBodyText><span lang=EN-US>The Common Lisp </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>TRACE</span><span
lang=EN-US> facility is very useful, and always works for any function (since
all functions are compiled, it handles compiled code). However, be very careful
with Common Lisp functions. You generally should not </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>TRACE</span><span
lang=EN-US> them because they may be used internally by the system.</span></p>

<p class=MsoBodyText><span lang=EN-US>The Corman Lisp IDE makes it very easy to
grab a copy of a function, add some </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>FORMAT</span><span lang=EN-US> statements,
execute the definition, and run. This gives customized debugging information in
a few seconds, once you get fluent with the technique. </span></p>

<p class=MsoBodyText><span lang=EN-US>The </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DUMP-ERROR-STACK</span><span
lang=EN-US> function, below, is useful, as are several other functions defined
in the </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span><span
lang=EN-US> (nickname </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DB</span><span lang=EN-US>) package.</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948683"><span lang=EN-US>DEBUGGER
Commands</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>At the time of this writing, the following
debugger commands are supported:</span></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:-.25pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:.1pt'><b><span lang=EN-US
  style='font-size:9.0pt;font-family:"Arial",sans-serif;color:black'>Command</span></b></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:.1pt'><b><span lang=EN-US
  style='font-size:9.0pt;font-family:"Arial",sans-serif;color:black'>Abbreviation</span></b></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=programsourcenormal style='margin-top:.1pt'><b><span lang=EN-US
  style='font-size:9.0pt;font-family:"Arial",sans-serif'>Explanation</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:CONTINUE</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:C</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Exits the debug loop and invokes the
  specified restart option.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:HELP</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:?</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Displays this command list.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:RESTARTS</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:R</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Displays restart options.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:FRAME</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:F</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Print the current stack frame.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:BACKTRACE</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:B</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Print a backtrace down from the
  current frame.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:NEXT</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:N</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Go down the stack one frame.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:PREVIOUS</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:P</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Go up the stack one frame.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:TOP</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:&lt;</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Go to the top of the stack.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:BOTTOM</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:&gt;</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Go up the bottom of the stack.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:GO</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:G</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Go up to the specified frame.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=115 valign=top style='width:86.4pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:LAMBDA</span></p>
  </td>
  <td width=90 valign=top style='width:67.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-family:"Courier New"'>:L</span></p>
  </td>
  <td width=337 valign=top style='width:252.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US>Display the lambda expression for the
  current function.</span></p>
  </td>
 </tr>
</table>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948684"><span lang=EN-US>Debugging
Functions</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>The following functions are exported by
the </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span><span
lang=EN-US> package. They may be used at any time (even when not in the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span><span
lang=EN-US> loop).</span></p>

<h3><a name="_Toc533948685"><span lang=EN-US>CONS-ADDRESS</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CONS-ADDRESS</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>uvector</span></i><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>                              </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the integer heap address of the
passed CONS cell.</span></p>

<h3><a name="_Toc533948686"><span lang=EN-US>DISASSEMBLE-BYTES</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>DISASSEMBLE</span><span
lang=EN-US style='font-family:"Courier New"'>-BYTES</span><span lang=EN-US
style='font-weight:normal'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";font-weight:normal'>address num-bytes</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>              </span></i><i><span
lang=EN-US style='font-weight:normal'> [function]</span></i></p>

<p class=programsourcenormal style='margin-top:0cm;margin-right:0cm;margin-bottom:
6.0pt;margin-left:36.0pt;text-indent:36.0pt'><i><span lang=EN-US>&amp;optional
(stream *standard-output*)</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>address </span></i><span lang=EN-US>should be an integer which
represents a valid memory address.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>num-bytes</span></i><span lang=EN-US> is an integer<i> </i>which
represents the number of bytes to disassemble.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>stream</span></i><i><span lang=EN-US style='font-family:"Courier New"'>
</span></i><span lang=EN-US>designates where to send the disassemble output.</span></p>

<h3><a name="_Toc533948687"><span lang=EN-US>DUMP-BYTES</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>DUMP-BYTES</span><span lang=EN-US
style='font-weight:normal'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";font-weight:normal'>obj</span></i><i><span
lang=EN-US style='font-weight:normal'>                                                                                </span></i><i><span
lang=EN-US style='font-weight:normal'> [function]</span></i></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>        </span><i><span
lang=EN-US>&amp;key (length *dump-bytes-default-length*)</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>             </span></i><i><span
lang=EN-US>(stream *standard-output*) </span></i></p>

<p class=Indentprogramsourcenormal style='margin-bottom:6.0pt'><i><span
lang=EN-US>             </span></i><i><span lang=EN-US>(width
*dump-bytes-default-width*))</span></i><i><span lang=EN-US style='font-size:
10.0pt'>    </span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>obj </span></i><span lang=EN-US>can be any lisp heap object or a
positive integer which represents a valid memory address.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>length</span></i><span lang=EN-US>, if specified, is the number
of bytes to display</span><span lang=EN-US style='font-size:10.0pt'>.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>stream</span></i><span lang=EN-US style='font-size:10.0pt'> </span><span
lang=EN-US>defaults to *standard-output* and designates where to output the
byte display.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>width</span></i><span lang=EN-US style='font-size:10.0pt'> </span><span
lang=EN-US>defaults to *dump-bytes-default-width* and designates the number of
bytes to output on each line.</span></p>

<p class=NumStepIndent><span lang=EN-US>Causes</span><span lang=EN-US
style='font-size:10.0pt'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>length</span></i><span lang=EN-US style='font-size:
10.0pt'> </span><span lang=EN-US>bytes to be displayed, starting at the heap
address of the passed object, or at the memory address if an integer is passed.</span></p>

<p class=VariableTitle><span lang=EN-US style='font-family:"Courier New"'>*DUMP-BYTES-DEFAULT-WIDTH*
</span><span lang=EN-US>                                                </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Defaults to 8. This variable is used to
control the number of bytes per line for calls to </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DUMP-BYTES</span><span
lang=EN-US>.</span></p>

<p class=VariableTitle><span lang=EN-US style='font-family:"Courier New"'>*DUMP-BYTES-DEFAULT-LENGTH*</span><span
lang=EN-US>                                                </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Defaults to 64. This variable is used
as the default number of bytes to dump for calls to </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DUMP-BYTES</span><span
lang=EN-US>.</span></p>

<h3><a name="_Toc533948688"><span lang=EN-US>DUMP-DWORDS</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>DUMP-DWORDS</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>obj</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                                   </span></i><i><span
lang=EN-US style='font-weight:normal'> [function]</span></i></p>

<p class=programsourcenormal><i><span lang=EN-US style='font-size:10.0pt'>            &amp;key
(length *dump-dwords-default-length*)</span></i></p>

<p class=programsourcenormal><i><span lang=EN-US style='font-size:10.0pt'>                
(stream *standard-output*) </span></i></p>

<p class=programsourcenormal style='margin-bottom:6.0pt'><i><span lang=EN-US
style='font-size:10.0pt'>                 (width *dump-dwords-default-width*)) <b>      </b>      </span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>obj </span></i><span lang=EN-US>can be any lisp heap object or a
positive integer which represents a valid memory address.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>length</span></i><span lang=EN-US>, if specified, is the number
of </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DWORDs</span><span
lang=EN-US> (32-bit integers) to display.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>stream</span></i><span lang=EN-US style='font-size:10.0pt'> </span><span
lang=EN-US>defaults to </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>*standard-output*</span><span lang=EN-US> and
designates where to output the byte display.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>width</span></i><span lang=EN-US style='font-size:10.0pt'> </span><span
lang=EN-US>defaults to </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>*dump-dwords-default-width*</span><span lang=EN-US>
and designates the number of </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DWORDs</span><span lang=EN-US> to output on each
line.</span></p>

<p class=NumStepIndent><span lang=EN-US>Causes</span><span lang=EN-US
style='font-size:10.0pt'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>length</span></i><span lang=EN-US> </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DWORDs</span><span
lang=EN-US> to be displayed, starting at the heap address of the passed object,
or at the memory address if an integer is passed.</span></p>

<p class=VariableTitle><span lang=EN-US style='font-family:"Courier New"'>*DUMP-DWORDS-DEFAULT-WIDTH*</span><span
lang=EN-US>                                                </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Defaults to 1. This variable is used to
control the number of </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DWORDs</span><span lang=EN-US> per line for calls to
</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DUMP-DWORDS</span><span
lang=EN-US>.</span></p>

<p class=VariableTitle><span lang=EN-US style='font-family:"Courier New"'>*DUMP-DWORDS-DEFAULT-LENGTH*</span><span
lang=EN-US>                                              </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Defaults to 32. This variable is used
as the default number of </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DWORDs </span><span lang=EN-US>to dump for calls to </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DUMP-DWORDS</span><span
lang=EN-US>.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948689"><span lang=EN-US>DUMP-ERROR-STACK</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DUMP-ERROR-STACK</span><span
lang=EN-US style='font-weight:normal'>                                                                          </span><span
lang=EN-US style='font-weight:normal'> [<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><span lang=EN-US>Prints a trace of the stack which was
captured when the last call to </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>ERROR</span><span lang=EN-US> or </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>BREAK</span><span
lang=EN-US> was made. This tells you what functions were active, and with which
arguments.</span></p>

<h3><a name="_Toc533948690"><span lang=EN-US>FIND-SOURCE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>FIND-SOURCE</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>func-name</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                             </span></i><i><span
lang=EN-US style='font-weight:normal'> [function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>func-name </span></i><span lang=EN-US>is a function or a symbol
which names a function.</span></p>

<p class=NumStepIndent><span lang=EN-US>If you are running from the Corman Lisp
IDE, this command opens an edit window which contains the source to the
requested function, and positions the text cursor at the first line of that
function. This only works if the function was defined in the process of a call
to </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>LOAD</span><span
lang=EN-US>. The <b>Execute File…</b> menu command does not initialize this
correctly. You may call </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>FIND-SOURCE</span><span lang=EN-US> on Corman Lisp
library functions if you like, to browse the source code.</span></p>

<h3><a name="_Toc533948691"><span lang=EN-US>PEEK-BYTE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>PEEK-BYTE</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>address</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                                 </span></i><i><span
lang=EN-US style='font-weight:normal'> [function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>address </span></i><span lang=EN-US>should be an integer which
represents a valid memory address.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the byte which is stored at the
passed memory address.</span></p>

<h3><a name="_Toc533948692"><span lang=EN-US>PEEK-DWORD</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>PEEK-DWORD</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>address</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                                </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>address </span></i><span lang=EN-US>should be an integer which
represents a valid memory address.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DWORD</span><span
lang=EN-US> (32-bit integer) which is stored at the passed memory address.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948693"><span lang=EN-US>STACK-TRACE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>STACK-TRACE</span><i><span
lang=EN-US style='font-family:Courier'>                                   </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CORMANLISP</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns a list representing the
execution stack frames of the currently executing thread.</span></p>

<p class=NumStepIndent><span lang=EN-US>This function is used internally by </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>ERROR</span><span
lang=EN-US> to store the stack frame returned by </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DUMP-ERROR-STACK</span><span
lang=EN-US>.</span></p>

<h3><a name="_Toc533948694"><span lang=EN-US>UVECTOR-ADDRESS</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>UVECTOR-ADDRESS</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>uvector</span></i><i><span
lang=EN-US style='font-family:Courier'>                        </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEBUG</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the integer heap address of the
passed uvector.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948695"><span lang=EN-US>12 
Memory Manager</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>The Corman Lisp Memory Manager consists
of several functions to allocate memory, and the garbage collector. None of
these functions are designed to be called explicitly. Instead, memory management
code is called implicitly when you call Common Lisp functions.</span></p>

<p class=MsoBodyText><span lang=EN-US>Corman Lisp includes a state-of-the-art
garbage collector for efficient use of memory. It is designed for maximum
performance, no noticeable pauses, and good virtual memory behavior. Technically
the Corman Lisp garbage collector (which is implemented in the kernel) has the
following attributes:</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Copying  (live data is moved during collection)</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Generational  (there are several generations of
heap objects sorted by age)</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Compacting  (the collection process results in a
compact heap with no fragmentation)</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Virtual-memory friendly  (it works with the
virtual memory system)</span></p>

<p class=MsoBodyText><span lang=EN-US>These attributes have been shown to be
especially good for Common Lisp implementations. There are several implications
of this, some positive, and some negative.</span></p>

<p class=MsoBodyText><span lang=EN-US>Memory allocation is extremely fast. It
is nearly as fast as stack allocation. Since fragmentation is not an issue, the
memory manager need only increment a pointer into free space to allocate a
block of arbitrary size.</span></p>

<p class=MsoBodyText><span lang=EN-US>Garbage collection normally only collects
Generation 0 data, and copies live data into Generation 1. This operation takes
just a few milliseconds. When Generation 1 fills up, it causes live data from
Generation 1 to be copied into Generation 2. The virtual memory hardware is
used to detect when older generation heap objects have been modified to point
to younger generation heap objects, thus avoiding the overhead of keeping track
of that in software.</span></p>

<p class=MsoBodyText style='page-break-before:always'><span lang=EN-US>On the
negative side, the fact that heap objects move around makes interfacing with
other languages, such as C or C++, more of a challenge. Lisp heap objects which
are exported to foreign functions must be referenced only indirectly, through
pointers that the garbage collector can update. In addition, all data objects
must be tagged with a few bits which indicate whether they are a heap pointer
or some other type of data (such as an integer). Maintaining these tags
actually has minimal impact on memory use and performance, but adds to the
complexity of interfacing with foreign code.</span></p>

<p class=bodytext><span lang=EN-US>Most Common Lisp functions which create Lisp
data items call the memory allocator, and user code normally never calls the
allocator functions explicitly. The function </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CONS</span><span lang=EN-US>
allocates a 2-cell heap object, and functions such as </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>VECTOR</span><span
lang=EN-US>, </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>MAKE-HASH-TABLE</span><span
lang=EN-US>, and </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>MAKE-INSTANCE</span><span lang=EN-US> all allocate heap objects.</span></p>

<p class=bodytext><span lang=EN-US>The Common Lisp </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>ROOM</span><span lang=EN-US>
function may be used to determine how much heap memory is being used at any
time. This function does not report memory being allocated and used by foreign
functions or the operating system, only that used by Lisp heap objects.</span></p>

<p class=bodytext><span lang=EN-US>There are several non-standard functions
relating to memory management that you may wish to call in user code.</span></p>

<h2><a name="_Toc533948696"><span lang=EN-US style='font-size:12.0pt'>Memory
Manager Functions</span></a></h2>

<h3><a name="_Toc533948697"></a><a name="__RefHeading___Toc420194167"><span
lang=EN-US>GC</span></a><span lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>GC</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>&amp;optional
(level 0)</span></i><i><span lang=EN-US>                                                                 </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Explicitly invokes the garbage
collector. The level may be in the range 0-3.</span></p>

<h3><a name="_Toc533948698"></a><a name="__RefHeading___Toc420194168"><span
lang=EN-US>MAKE-WEAK-POINTER</span></a><span lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>MAKE-WEAK-POINTER</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>objectl</span></i><span
lang=EN-US>                                                        </span><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>The object may be any Lisp heap object.
This function returns a special object of type </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WEAK-PTR</span><span
lang=EN-US> which contains one slot: the passed object. The reference is set up
such that it will not cause the object to survive garbage collection. If no
other pointers to the object exist, it will be collected when a normal garbage
collection occurs. However, when that happens, the garbage collector will set
the object slot of the weak pointer to </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span lang=EN-US>.
This is a useful type of object for tracking outstanding instances of some data
structure, for example. </span></p>

<h3><a name="_Toc533948699"></a><a name="__RefHeading___Toc420194169"><span
lang=EN-US>WEAK-POINTER-P</span></a><span lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>WEAK-POINTER-P</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>objectl</span></i><span
lang=EN-US>                                                               </span><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>T</span><span lang=EN-US> if
the object is of type </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>WEAK-PTR</span><span lang=EN-US>, otherwise it
returns </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span
lang=EN-US>.</span></p>

<h3><a name="_Toc533948700"></a><a name="__RefHeading___Toc420194170"><span
lang=EN-US>WEAK-POINTER-OBJ</span></a><span lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>WEAK-POINTER-OBJ</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>weak-ptr</span></i><span
lang=EN-US>                                                        </span><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>The passed argument should be an object
of type </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WEAK-PTR</span><span
lang=EN-US>.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the object that the weak
pointer references.</span></p>

<h3><a name="_Toc533948701"></a><a name="__RefHeading___Toc420194171"><span
lang=EN-US>REGISTER-FINALIZATION</span></a><span lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>REGISTER-FINALIZATION</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>object
function</span></i><span lang=EN-US>                            </span><span
lang=EN-US style='font-weight:normal'> [<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>object</span></i><span lang=EN-US> may be any Lisp heap object.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>function</span></i><i><span lang=EN-US style='font-family:"Courier New"'>
</span></i><span lang=EN-US>should be a function which takes one argument.</span></p>

<p class=NumStepIndent><span lang=EN-US>This function instructs the garbage
collector that when the passed object is collected, prior to collection the
passed function should be executed. When the function is called, the garbage
collector passes the object as its single parameter. </span></p>

<p class=MsoBodyText style='margin-top:3.0pt;text-indent:18.0pt;page-break-after:
avoid'><b><span lang=EN-US style='font-family:"Arial",sans-serif'>Implementation
Note:</span></b></p>

<p class=NumStepIndent><span lang=EN-US>The implementation of </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>REGISTER-FINALIZATION</span><b><span
lang=EN-US> </span></b><span lang=EN-US>is such that the lifetime of the passed
object is extended somewhat. The collector cannot know which objects will not
survive collection until after a collection is finished (or at least underway).
However, the finalization function must not be called during a collection (so
as not to recursively cause garbage collection). As a result, the object to be
finalized is <i>resurrected</i> after collection, its finalization function is
called, the object is removed from the finalization list, and is then left to
be collected at the next collection.</span></p>

<h3><a name="_Toc533948702"><span lang=EN-US>ENABLE-HARDWARE-GC</span></a><span
lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>ENABLE-HARDWARE-GC</span><span
lang=EN-US style='font-weight:normal'> &amp;optional </span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>enable?</span></i><span
lang=EN-US>                                     </span><span lang=EN-US
style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Enables or disables <i>hardware
assisted</i> garbage collector mode.</span></p>

<h3><a name="_Toc533948703"><span lang=EN-US>HARDWARE-GC-ENABLED-P</span></a><span
lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>HARDWARE-GC-ENABLED-P</span><span
lang=EN-US>                                                               </span><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns <b>T</b> if hardware assisted
garbage collector mode is enabled. Returns <b>NIL</b> otherwise.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948704"><span lang=EN-US>13
Foreign Function Interface</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>The Foreign Function Interface, or FFI,
allows Common Lisp functions to easily call any functions which are exported by
a Windows dynamic link library (DLL). It provides specific support for a
C-language interface, through a package called <br>
</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span><span
lang=EN-US> (nickname </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>CT</span><span lang=EN-US>). Using macros defined in
</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span><span
lang=EN-US>, you may define C datatypes, including structures. You may want to
look at example programs included with Corman Lisp which use these features.
Any Win32 function may be called easily with this facility.</span></p>

<p class=MsoBodyText><span lang=EN-US>In addition to being able to use the FFI
to call foreign functions, you may use the </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEFUN-CALLBACK</span><span
lang=EN-US> macro to define an interface to any Lisp function, which may be
given to a foreign function for later calling. This is extremely useful in the
Windows operating system calls, and is used for such things as Window
procedures (WINPROCs).</span></p>

<h2><a name="_Toc533948705"><span lang=EN-US style='font-size:12.0pt'>Foreign
Functions</span></a></h2>

<h3><a name="_Toc533948706"><span lang=EN-US>DEFCTYPE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFCTYPE</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>name c
type</span></i><i><span lang=EN-US>                                                                       </span></i><i><span
lang=EN-US style='font-weight:normal'>[macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>name</span></i><i><span lang=EN-US style='font-family:"Courier New"'>
</span></i><span lang=EN-US>should be a symbol, and is not evaluated.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>ctype</span></i><span lang=EN-US> is not evaluated, and should
be a form which represents a c-type which is already defined.</span></p>

<p class=NumStepIndent style='page-break-before:always'><span lang=EN-US>Examples
of predefined c-types are:</span></p>

<p class=programsourcenormal><span lang=EN-US>     :void</span></p>

<p class=programsourcenormal><span lang=EN-US>     :char</span></p>

<p class=programsourcenormal><span lang=EN-US>     :unsigned-char</span></p>

<p class=programsourcenormal><span lang=EN-US> </span><span lang=EN-US>    :short</span></p>

<p class=programsourcenormal><span lang=EN-US>     :unsigned-short</span></p>

<p class=programsourcenormal><span lang=EN-US> </span><span lang=EN-US>    :long</span></p>

<p class=programsourcenormal><span lang=EN-US>     :unsigned-long</span></p>

<p class=programsourcenormal><span lang=EN-US>     :short-bool</span></p>

<p class=programsourcenormal><span lang=EN-US>     :long-bool</span></p>

<p class=programsourcenormal><span lang=EN-US>     :single-float</span></p>

<p class=programsourcenormal><span lang=EN-US>     :double-float</span></p>

<p class=programsourcenormal><span lang=EN-US>     :handle</span></p>

<p class=programsourcenormal><span lang=EN-US> </span><span lang=EN-US>    (:long
5)             ; array of 5 longs</span></p>

<p class=programsourcenormal><span lang=EN-US> </span><span lang=EN-US>    (:long
*)             ; pointer to long</span></p>

<p class=programsourcenormal><span lang=EN-US> </span><span lang=EN-US>    ((:long
*) *)         ; pointer to pointer to long</span></p>

<p class=programsourcenormal><span lang=EN-US> </span><span lang=EN-US>    (:struct
f1 :short f2 :long)     </span></p>

<p class=programsourcenormal><span lang=EN-US>                    </span><span
lang=EN-US>; struct containing a short and a long</span></p>

<p class=bodytext><i><span lang=EN-US>     </span></i><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal><span lang=EN-US>     </span><span lang=EN-US
style='font-size:10.0pt'>(ct:defctype string32 (:char 32)); declare a type
which is a </span></p>

<p class=programsourcenormal style='margin-left:180.0pt;text-indent:36.0pt'><span
lang=EN-US style='font-size:10.0pt'>; C array of 32 characters</span></p>

<h3><a name="_Toc533948707"><span lang=EN-US>DEFWINTYPE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFWINTYPE</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>name
ctype</span></i><span lang=EN-US>                                                                     </span><span
lang=EN-US style='font-weight:normal'>[<i>macro</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WIN32</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro is like </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFCTYPE</span><span
lang=EN-US>, except that it causes the defined type to be exported from the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WIN32</span><span
lang=EN-US> package.</span></p>

<h3><a name="_Toc533948708"></a><a name="__RefHeading___Toc420194176"><span
lang=EN-US>DEFCSTRUCT</span></a><span lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFCSTRUCT</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>name
field-definitions</span></i><i><span lang=EN-US>                                          </span></i><i><span
lang=EN-US style='font-weight:normal'>[macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro declares a C structure
definition</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>name</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'> </span><span lang=EN-US>should be a symbol (not
evaluated).</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>field-definitions</span></i><span lang=EN-US> is not evaluated,
and should be a list of field-definition descriptors, each of which consists of
a symbol and a c-type descriptor.</span></p>

<p class=NumStepIndent style='page-break-before:always'><i><span lang=EN-US>Example:</span></i></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>(ct:defcstruct
MEMORY_BASIC_INFORMATION</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>((BaseAddress       (:void *))</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>(AllocationBase    (:void *))</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>(AllocationProtect  :unsigned-long)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>(RegionSize        :unsigned-long)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>(State             :unsigned-long)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>(Protect           :unsigned-long)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>(Type              :unsigned-long)))</span></p>

<h3><a name="_Toc533948709"></a><a name="__RefHeading___Toc420194177"><span
lang=EN-US>DEFWINSTRUCT</span></a><span lang=EN-US> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFWINSTRUCT</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>name
field-definitions</span></i><i><span lang=EN-US>                                     </span></i><i><span
lang=EN-US style='font-weight:normal'>[macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WIN32</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro is like </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFCSTRUCT</span><span
lang=EN-US>, except that it causes the defined structure type to be exported
from the </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WIN32</span><span
lang=EN-US> package.</span></p>

<h3><a name="_Toc533948710"><span lang=EN-US>DEFUN-DLL</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>DEFUN-DLL</span><span lang=EN-US
style='font-family:Courier'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";font-weight:normal'>name param-list</span></i><i><span
lang=EN-US style='font-family:Courier'>                       </span></i><i><span
lang=EN-US style='font-weight:normal'>[macro]</span></i></p>

<p class=programsourcenormal style='margin-bottom:6.0pt'><span lang=EN-US
style='font-size:10.0pt;font-family:Courier'>      </span><i><span lang=EN-US>&amp;key
return-type library-name entry-name linkage-type</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro causes a Lisp wrapper
function to be built which, when executed, will call the specified DLL
function.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>name</span></i><span lang=EN-US> is a symbol which specifies the
name of the Lisp wrapper function.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>param-list</span></i><span lang=EN-US> is a list of parameter
specifiers, each of which contains a variable name and a c-type specification.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>return-type</span></i><span lang=EN-US> specifies the type of
value returned by the function, if any. It defaults to </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>:long</span><span
lang=EN-US>.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>library-name</span></i><span lang=EN-US> is a required key which
specifies the name of the </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>.DLL</span><span lang=EN-US> file which contains the
function being called.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>entry-name</span></i><i><span lang=EN-US style='font-family:
"Courier New"'> </span></i><span lang=EN-US>is the name of the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.DLL </span><span
lang=EN-US>function being called. It is normal that the <i>name</i> and<i>
entry-name</i> function be the same, but this is not required.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>linkage-type</span></i><span lang=EN-US> should be either </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>:c</span><span
lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>:pascal</span><span lang=EN-US>, with </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>:c</span><span lang=EN-US>
being the default. With </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>:c</span><span lang=EN-US> linkage, the called
function is not expected to remove the parameters from the stack when it
returns. With </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>:pascal</span><span
lang=EN-US> linkage, it is assumed that the called function will remove the
passed parameters.</span></p>

<h3><a name="_Toc533948711"><span lang=EN-US>DEFWINAPI</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>DEFWINAPI</span><span lang=EN-US
style='font-family:Courier'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";font-weight:normal'>name param-list</span></i><i><span
lang=EN-US style='font-family:Courier'>                       </span></i><i><span
lang=EN-US style='font-weight:normal'>[macro]</span></i></p>

<p class=programsourcenormal style='margin-bottom:6.0pt'><span lang=EN-US
style='font-size:10.0pt;font-family:Courier'>      </span><i><span lang=EN-US>&amp;key
return-type library-name entry-name linkage-type</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WIN32</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro is like </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFUN-DLL</span><span
lang=EN-US>, except that it causes the defined function to be exported from the
</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WIN32</span><span
lang=EN-US> package.</span></p>

<h3><a name="_Toc533948712"><span lang=EN-US>CREATE-FOREIGN-PTR</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CREATE-FOREIGN-PTR</span><i><span
lang=EN-US style='font-family:Courier'>                            </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:  </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns a foreign pointer object, with
the address slot initialized to 0.</span></p>

<h3><a name="_Toc533948713"><span lang=EN-US>SIZEOF</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>SIZEOF</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>c-type-specifier</span></i><i><span
lang=EN-US style='font-family:Courier'>                         </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>c-type-specifier</span></i><span lang=EN-US> is a valid C type
specifier</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the number of bytes required to
hold a C object of the passed type.</span></p>

<h3><a name="_Toc533948714"><span lang=EN-US>CPOINTER-VALUE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CPOINTER-VALUE</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>foreign-pointer</span></i><i><span
lang=EN-US style='font-family:Courier'>                  </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the foreign address stored in
the passed foreign pointer.</span></p>

<p class=NumStepIndent><span lang=EN-US>You may use </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SETF</span><span lang=EN-US>
to set this value.</span></p>

<h3><a name="_Toc533948715"><span lang=EN-US>CPOINTERP</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CPOINTERP</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>object</span></i><span
lang=EN-US style='font-family:Courier'>                               </span><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>T</span><span lang=EN-US> if
the passed object is a foreign pointer, </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span lang=EN-US>
otherwise.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948716"><span lang=EN-US>DEFUN-CALLBACK</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFUN-CALLBACK</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>name</span></i><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'> arglist
&amp;rest body</span></i><span lang=EN-US style='font-weight:normal'>                               </span><i><span
lang=EN-US style='font-weight:normal'>[macro</span></i><span lang=EN-US
style='font-weight:normal'>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package:</span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'> C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>name </span></i><span lang=EN-US>is a symbol.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>arglist</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'> </span><span lang=EN-US>is a list of the form:</span></p>

<p class=programsourcenormal><i><span lang=EN-US>   </span></i><i><span
lang=EN-US>         </span></i><span lang=EN-US>((arg1-name  arg1-c-type)</span></p>

<p class=programsourcenormal><span lang=EN-US>     </span><span lang=EN-US>        (arg2-name 
arg2-c-type)</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt'><span lang=EN-US>       
    etc.)</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro defines a callback function
which may be passed to a foreign function for later calling back into Lisp. The
function that is created has </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>:pascal</span><span lang=EN-US> linkage, which is
the usual style for operating system callbacks in Windows. In other words, the
callback function will remove its own parameters from the call stack.</span></p>

<p class=NumStepIndent><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>(ct:defun-callback
WndEnumProc </span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>    </span><span
lang=EN-US>((hwnd HWND)</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>     </span><span
lang=EN-US>(lParam LPARAM))</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>    </span><span
lang=EN-US>(funcall *wnd-enum-proc* hwnd lParam)</span></p>

<p class=programsourcenormal style='text-indent:18.0pt'><span lang=EN-US>    </span><span
lang=EN-US>t)</span></p>

<h3><a name="_Toc533948717"><span lang=EN-US>DEFUN-C-CALLBACK</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFUN-C-CALLBACK</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'> </span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>name
arglist &amp;rest body</span></i><i><span lang=EN-US style='font-weight:normal'>                        </span></i><i><span
lang=EN-US style='font-weight:normal'>[macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro is like </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFUN-CALLBACK</span><span
lang=EN-US>, except that the defined callback function has </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>:c</span><span
lang=EN-US> linkage, i.e. the caller is expecting to remove the passed
parameters from the stack.</span></p>

<h3><a name="_Toc533948718"><span lang=EN-US>GET-CALLBACK-PROCINST</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>GET-CALLBACK-PROCINST</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>callback-name</span></i><i><span
lang=EN-US>                                </span></i><i><span lang=EN-US
style='font-weight:normal'> [function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>callback-name</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'> </span><span lang=EN-US>is the name of a callback
function defined with </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DEFUN-CALLBACK </span><span lang=EN-US>or</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>
DEFUN-C-CALLBACK.</span></p>

<p class=NumStepIndent><span lang=EN-US>This function returns the foreign
pointer to the callback function, suitable for passing to foreign functions.</span></p>

<h3><a name="_Toc533948719"><span lang=EN-US>CREF</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CREF</span><span
lang=EN-US style='font-size:10.0pt;font-weight:normal'> </span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>c-type
object access</span></i><i><span lang=EN-US style='font-size:10.0pt;font-weight:
normal'>                                                                                    [macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>c-type</span></i><span lang=EN-US> is a C type definition, and
is not evaluated.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>object </span></i><span lang=EN-US>is a foreign pointer to a
C-style array or structure, and <i>is</i> evaluated.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>access </span></i><span lang=EN-US>is an integer, in the case of
an array, or a field name, in the case of a structure. If it is an array index,
it is evaluated. If it is a field name it is not evaluated.</span></p>

<p class=bodytext><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US
style='font-size:10.0pt'>(ct:defcstruct point ((x :long)(y :long))) ; declare a
C point structure</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US
style='font-size:10.0pt'>(setf p (ct:malloc (ct:sizeof 'point))) ; allocate a
point</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US
style='font-size:10.0pt'>(setf (ct:cref point p x) 100)             ; set the
point x value = 100</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US
style='font-size:10.0pt'>(setf (ct:cref point p y) 200)             ; set the
point y-value = 200</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US
style='font-size:10.0pt'>(ct:cref point p x)  -&gt;  100         ; access the
point x-value</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US
style='font-size:10.0pt'>&nbsp;</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US>(ct:defctype
point-array (point 10))      ;define a point array</span></p>

<p class=programsourcenormal style='margin-right:-45.0pt'><span lang=EN-US>(setf
a (ct:malloc (ct:sizeof 'point-array))) ;allocate a point array</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US>(dotimes
(j 10)                 ; initialize each point</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US>    </span><span
lang=EN-US>(setf (ct:cref point (ct:cref point-array a j) x) j)</span></p>

<p class=programsourcenormal style='margin-right:-13.5pt'><span lang=EN-US>    </span><span
lang=EN-US>(setf (ct:cref point (ct:cref point-array a j) y) j))</span></p>

<p class=programsourcenormal style='margin-top:0cm;margin-right:-18.0pt;
margin-bottom:6.0pt;margin-left:0cm'><span lang=EN-US>(ct:cref point (ct:cref point-array
a 2) x) -&gt; 2 ; retrieve p[2].x</span></p>

<h3><a name="_Toc533948720"><span lang=EN-US>C-STRING-LENGTH</span></a></h3>

<p class=FunctionTitle style='margin-bottom:5.0pt'><span lang=EN-US
style='font-family:"Courier New"'>C_STRING-LENGTH</span><span lang=EN-US
style='font-weight:normal'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";font-weight:normal'>c-string</span></i><span
lang=EN-US style='font-weight:normal'>                                                          
[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>c-string</span></i><i><span lang=EN-US style='font-family:"Courier New"'>
</span></i><span lang=EN-US>should be a foreign pointer which points to a
0-terminated character array.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the number of characters in the
array up to but not including the 0 terminating character.</span></p>

<h3><a name="_Toc533948721"><span lang=EN-US>CPOINTER=</span></a></h3>

<p class=FunctionTitle style='margin-bottom:5.0pt'><span lang=EN-US
style='font-family:"Courier New"'>CPOINTER=</span><span lang=EN-US
style='font-weight:normal'> </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";font-weight:normal'>pointer-1 pointer-2</span></i><span
lang=EN-US style='font-family:Courier;font-weight:normal'>                   </span><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent style='margin-bottom:5.0pt'><span lang=EN-US>Package: </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>pointer-1 and pointer-2</span></i><i><span lang=EN-US
style='font-family:"Courier New"'> </span></i><span lang=EN-US>should be
foreign pointers.<br>
Returns </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>T</span><span
lang=EN-US> if the two pointers point to the same memory address, </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span
lang=EN-US> otherwise.</span></p>

<h3><a name="_Toc533948722"><span lang=EN-US>CPOINTER-NULL</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CPOINTER-NULL</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>pointer</span></i><i><span
lang=EN-US style='font-family:Courier;font-weight:normal'>                          </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>pointer</span></i><i><span lang=EN-US style='font-family:"Courier New"'>
</span></i><span lang=EN-US>should be a foreign pointer.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>T</span><span lang=EN-US> if
the pointer is </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>NULL</span><span lang=EN-US>, i.e. points to address 0.</span></p>

<h3><a name="_Toc533948723"><span lang=EN-US>MEMCMP</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>MEMCMP</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>p1 p2
count</span></i><i><span lang=EN-US style='font-family:Courier;font-weight:
normal'>                             </span></i><i><span lang=EN-US
style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>P1 and p2 </span></i><span lang=EN-US>should be foreign
pointers.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-family:"Courier New"'>count
</span></i><span lang=EN-US>should be a fixnum.</span></p>

<p class=NumStepIndent><span lang=EN-US>Count pairs of bytes at p1 and p2 are
compared. If the bytes at p1 and p2 are the same, 0 is returned. If a non-equal
byte is encountered, if the lesser byte is in p1, -1 is returned, otherwise 1
is returned.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns:</span></p>

<p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='font-size:10.0pt'>     </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>-1 if p1 &lt; p2</span></p>

<p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>   0 if p1 == p2</span></p>

<p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>   1 if p1 &gt; p2</span></p>

<h3><a name="_Toc533948724"><span lang=EN-US>MALLOC</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>MALLOC</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>size</span></i><i><span
lang=EN-US style='font-family:Courier;font-weight:normal'>                                   </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>size</span></i><i><span lang=EN-US> </span></i><span lang=EN-US>should
be a fixnum.</span></p>

<p class=NumStepIndent><span lang=EN-US>Allocates a block of</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'> <i>size</i> </span><span
lang=EN-US>bytes of memory from the foreign heap.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns a foreign heap pointer to the
allocated block.</span></p>

<p class=NumStepIndent><span lang=EN-US>The block returned may be deallocated
with </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>FREE</span><span
lang=EN-US>, but this is optional. If</span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'> FREE</span><span lang=EN-US> is not called,
the garbage collector will free the block when it collects the foreign pointer
(via finalization).</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948725"><span lang=EN-US>FREE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>FREE</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>pointer</span></i><i><span
lang=EN-US style='font-weight:normal'>                                                                                      
[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>pointer</span></i><i><span lang=EN-US> </span></i><span
lang=EN-US>should be a foreign heap pointer, allocated with </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>MALLOC</span><span
lang=EN-US>.</span></p>

<p class=NumStepIndent><span lang=EN-US>This function deallocates the block of
foreign heap memory referenced by the pointer, and sets the pointer to 0.</span></p>

<p class=NumStepIndent><span lang=EN-US>Calling this function is optional,
since the collector, when it frees the foreign heap pointer, will call </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>FREE </span><span
lang=EN-US>during finalization. It is useful if you are concerned about foreign
heap size and you want to make sure the memory gets freed. Note that filling up
the foreign heap never, in and of itself, causes Lisp garbage collection to
occur.</span></p>

<h3><a name="_Toc533948726"><span lang=EN-US>FOREIGN-PTR-TO-INT</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>FOREIGN-PTR-TO-INT</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>pointer</span></i><i><span lang=EN-US
style='font-family:Courier;font-weight:normal'>                      </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>pointer</span></i><i><span lang=EN-US> </span></i><span
lang=EN-US>should be a foreign pointer.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the integer which represents
the memory address the pointer is pointing to.</span></p>

<h3><a name="_Toc533948727"><span lang=EN-US>INT-TO-FOREIGN-PTR</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>INT-TO-FOREIGN-PTR</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>integer</span></i><i><span lang=EN-US
style='font-family:Courier;font-weight:normal'>                      </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns a foreign pointer which has
been initialized to point to the address the integer represents..</span></p>

<h3><a name="_Toc533948728"><span lang=EN-US>UNICODE-TO-LISP-STRING</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>UNICODE-TO-LISP-STRING</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>unicode-string</span></i><i><span
lang=EN-US style='font-family:Courier;font-weight:normal'>           </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>unicode-string</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'> </span><span lang=EN-US>should be a foreign pointer
to a null-terminated unicode string (16-bit characters).</span></p>

<p class=NumStepIndent style='page-break-before:always'><span lang=EN-US>Returns
a newly created Lisp ASCII character string. If the unicode string contains
characters where the high byte is non-zero, the characters will be truncated to
8 bits. This should be remedied in future releases of Corman Lisp, which will
support Lisp strings of unicode characters.</span></p>

<h3><a name="_Toc533948729"><span lang=EN-US>LISP-STRING-TO-UNICODE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>LISP-STRING-TO-UNICODE</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>string</span></i><i><span lang=EN-US
style='font-family:Courier;font-weight:normal'>                   </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>string</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'> </span><span lang=EN-US>should be a Lisp string</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns a newly allocated foreign heap
pointer, which points to a newly allocated foreign heap block containing a
unicode version (16-bit characters) of the passed Lisp string.</span></p>

<h3><a name="_Toc533948730"><span lang=EN-US>C-STRING-TO-LISP-STRING</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>C-STRING-TO-LISP-STRING</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>c-string</span></i><i><span lang=EN-US
style='font-family:Courier;font-weight:normal'>                </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>c-string</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'> </span><span lang=EN-US>should be a foreign pointer
to a null-terminated ASCII character string.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns a newly created Lisp string
which contains the same characters as the passed c-string.</span></p>

<h3><a name="_Toc533948731"><span lang=EN-US>LISP-STRING-TO-C-STRING</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>LISP-STRING-TO-C-STRING</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>lisp-string</span></i><i><span lang=EN-US
style='font-family:Courier;font-weight:normal'>             </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>lisp-string</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'> </span><span lang=EN-US>should be a Lisp string.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns a newly allocated foreign heap
pointer, which points to a newly allocated foreign heap block containing an
ASCII character string copy the passed Lisp string.</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:10.0pt'>The</span><span
lang=EN-US> returned ASCII string will have a 0 terminating byte.</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948732"><span lang=EN-US>C
Function Definition Parser</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>The C declaration parser is written by </span><span
lang=EN-US><a href="mailto:vassili@magma.ca">Vassili Bykov</a></span><span
lang=EN-US>, based on the original version by Roger Corman. It automatically
generates foreign function interface (FFI) declarations from C source code. </span></p>

<p class=MsoBodyText><span lang=EN-US>The parser is invoked whenever a
character sequence </span><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>#!</span></span><span lang=EN-US> is encountered in
Lisp code. This character sequence begins a <i>C declaration block</i>: a
portion of the source containing declarations and preprocessor directives,
supposedly pasted from a C header file. The declaration block is terminated by
a declaration block end marker: </span><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>!#</span></span><span lang=EN-US>. At the beginning of
the block the parser expects to find a <i>translation parameter form.</i> The
full syntax of parameter form is described </span><span lang=EN-US><a
href="#tparams">later in this text</a></span><span lang=EN-US>. The C
declarations in the declaration block are parsed, analyzed, and the </span><span
lang=EN-US><a href="#FFIDefs">corresponding Corman Lisp FFI declaration forms</a></span><span
lang=EN-US> are generated. </span></p>

<p class=MsoBodyText><span lang=EN-US>As an introductory example, consider this
C declaration block and the Lisp forms it is translated to. </span></p>

<p class=Preformatted><span lang=EN-US>#! (:library &quot;User32&quot; :ignore
&quot;WINUSERAPI&quot; :pascal &quot;WINAPI&quot;)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US>/* Just a few styles -- this comment is
ignored, BTW */</span></p>

<p class=Preformatted><span lang=EN-US>// and this is ignored, too</span></p>

<p class=Preformatted><span lang=EN-US>#define
WS_POPUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0x80000000L</span></p>

<p class=Preformatted><span lang=EN-US>#define
WS_BORDER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0x00800000L</span></p>

<p class=Preformatted><span lang=EN-US>#define
WS_SYSMENU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x00080000L</span></p>

<p class=Preformatted><span lang=EN-US>#define
WS_POPUPWINDOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(WS_POPUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | \</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>WS_BORDER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
| \</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>WS_SYSMENU)</span></p>

<p class=Preformatted><span lang=EN-US>typedef struct tagMSG {</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
hwnd;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>UINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
message;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>WPARAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
wParam;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>LPARAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
lParam;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
time;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>POINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pt;</span></p>

<p class=Preformatted><span lang=EN-US>} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;</span></p>

<p class=Preformatted style='margin-right:-18.0pt'><span lang=EN-US
style='letter-spacing:-1.0pt'>WINUSERAPI BOOL WINAPI DrawEdge(HDC hdc, LPRECT
qrc, UINT edge, UINT grfFlags);</span></p>

<p class=Preformatted><span lang=EN-US>!#</span></p>

<p class=MsoNormal style='margin-bottom:6.0pt;page-break-before:always'><span
lang=EN-US>This block is translated into a Lisp form: </span></p>

<p class=Preformatted><span lang=EN-US>(PROGN</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINCONSTANT WS_POPUP 2147483648)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINCONSTANT WS_BORDER 8388608)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINCONSTANT WS_SYSMENU 524288)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINCONSTANT WS_POPUPWINDOW</span></p>

<p class=Preformatted style='margin-right:-18.0pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US style='letter-spacing:-1.0pt'>(LOGIOR
(LOGIOR WS_POPUP WS_BORDER) WS_SYSMENU))</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(PROGN</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINSTRUCT MSG&nbsp; ((HWND HWND)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(MESSAGE UINT)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(WPARAM WPARAM)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(LPARAM LPARAM)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(TIME DWORD)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(PT POINT)))</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINTYPE LPMSG (MSG *))</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINTYPE NPMSG (MSG *))</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFWINTYPE PMSG (MSG *)))</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(DEFUN-DLL DRAWEDGE</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>((HDC HDC) (QRC LPRECT) (EDGE UINT)
(GRFFLAGS UINT))</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:RETURN-TYPE BOOL</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:LIBRARY-NAME &quot;User32.dll&quot;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:ENTRY-NAME &quot;DrawEdge&quot;</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:LINKAGE-TYPE :PASCAL))</span></p>

<p class=MsoBodyText><span lang=EN-US>Note how the translation parameters
affected the translation: the </span><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>:library</span></span><span lang=EN-US> parameter set
the name of the library used to call the API defined in the block. The </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>:ignore</span></span><span
lang=EN-US> parameter instructed the translator to ignore the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WINUSERAPI</span><span
lang=EN-US> declaration, which would otherwise be considered to be a part of
the function return type declaration. </span></p>

<h3><a name="_Toc533948733"></a><a name=tparams></a><span lang=EN-US>Translation
Parameters</span></h3>

<p class=MsoBodyText><span lang=EN-US>The parameter form is a list of the
following syntax: </span></p>

<p class=Preformatted style='margin-top:0cm;margin-right:-13.5pt;margin-bottom:
6.0pt;margin-left:0cm'><span lang=EN-US>(&amp;key library export ignore pascal
translate trim-last auto-ansi verbose)</span></p>

<p class=MsoBodyText><span lang=EN-US>The mode parameter is required while the
others are optional with the exception of library, which is required if the
translation block contains function prototypes. </span></p>

<p class=Paramsolo><a name="param_library"></a><span lang=EN-US>library</span></p>

<p class=NumStepIndent><span lang=EN-US>This parameter value should be a
string. It names the DLL where the functions defined in this declaration block
are to be found. If the name does not have an extension, &quot;.dll&quot; is
added. This parameter is required when the block contains function
declarations. In other cases it is optional.</span></p>

<p class=Paramsolo><a name="param_export"></a><span lang=EN-US>export</span></p>

<p class=NumStepIndent><span lang=EN-US>This parameter value is a generalized
boolean that indicates whether the names of all constants, types, and functions
defined as the result of translating the block should be exported from the
defining package. The default value is nil.</span></p>

<p class=Paramsolo><a name="param_ignore"></a><span lang=EN-US>ign</span><span
lang=EN-US style='font-style:normal'>o</span><span lang=EN-US>re</span></p>

<p class=NumStepIndent><span lang=EN-US>This parameter should be a string or a
list of strings (or symbols, in which case their names are used). All tokens in
function prototypes in the block that match one of the strings are ignored.
This is useful for such declarations as </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WINUSERAPI</span><span
lang=EN-US> in </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>WINUSER.H</span><span lang=EN-US> or </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WINCOMMCTRLAPI</span><span
lang=EN-US> in </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>COMMCTL.H</span><span lang=EN-US>, used in C to specify
functions as exported from a DLL. Such declarations are of no importance on the
Lisp side. Because they are usually attached to every function prototype in a
.h file, it is easier to specify them as ignored than edit the function
prototypes manually to remove them. In other words, consider </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>:ignore
&quot;WINUSERAPI&quot;</span></span><span lang=EN-US> to be the Lisp equivalent
of </span><span class=Typewriter><span lang=EN-US style='font-size:11.0pt'>#define
WINUSERAPI </span></span><span lang=EN-US>in a C header file.</span></p>

<p class=Paramsolo><span lang=EN-US>pascal</span></p>

<p class=NumStepIndent><span lang=EN-US>This parameter should be a string or a
list of strings (or symbols, in which case their names are used). Functions
that have one of these tokens in their prototype will have </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>:pascal</span></span><span
lang=EN-US> linkage, other functions will have the default </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>:c</span></span><span
lang=EN-US> linkage. Very often, working with Win32 declarations, this
parameter would have &quot;WINAPI&quot; as its value.</span></p>

<p class=Paramsolo><span lang=EN-US>translate</span></p>

<p class=Paramsolo><span lang=EN-US>trim-last</span></p>

<p class=Paramsolo><span lang=EN-US>auto-ansi</span></p>

<p class=NumStepIndent><span lang=EN-US>These three parameters control name
translation and are described in the </span><span lang=EN-US><a
href="#NameTranslation">Name Translation</a></span><span lang=EN-US> section.</span></p>

<p class=Paramsolo><span lang=EN-US>verbose</span></p>

<p class=NumStepIndent><span lang=EN-US>When true, the C definitions and their
translations are printed on the *standard-output* during translation. The
default value is </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>NIL</span><span lang=EN-US>.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948734"></a><a
name=FFIDefs></a><span lang=EN-US>FFI Definitions</span></h3>

<p class=MsoBodyText><span lang=EN-US>The following table gives an idea of what
C declarations are translated to. </span></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:.9pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border:solid black 1.0pt;border-right:
  none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><b><span lang=EN-US
  style='font-family:"Arial",sans-serif'>C</span></b></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><b><span lang=EN-US
  style='font-family:"Arial",sans-serif'>Lisp</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>#define &lt;name &lt;expr</span></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>(defconstant &lt;name &lt;translated-expr)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>typedef int *pint;</span></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>(defctype pint (:long *))</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>typedef int *pintarr[5];</span></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>(defctype pintarr ((:long *) 5))</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>typedef struct { <br>
  &nbsp; int x; <br>
  &nbsp; pint y; <br>
  } FOO, *LPFOO;</span></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>(defcstruct foo ((x :long) (y :pint))) <br>
  (defctype lpfoo (foo *))</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><a
  name="struct_and_typedef_struct_example"></a><span lang=EN-US
  style='font-size:9.0pt'>struct IDirectDraw; <br>
  typedef struct IDirectDraw <br>
      *LPIDirectDraw;</span></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>(defcstruct IDirectDraw nil) <br>
  (defctype LPIDirectDraw (IDirectDraw *))</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>WINUSERAPI BOOL WINAPI <br>
  ShowWindow (HWND hWnd, int nCmdShow);</span></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>(defun-dll showwindow <br>
  &nbsp;&nbsp;&nbsp; ((hwnd hwnd) (ncmdshow :long)) <br>
  &nbsp; :return-type bool <br>
  &nbsp; :entry-name &quot;ShowWindow&quot; <br>
  &nbsp; :library &quot;User32.dll&quot; <br>
  &nbsp; :linkage-type :pascal)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=263 style='width:197.1pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>interface {...};</span></p>
  </td>
  <td width=283 style='width:212.0pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=TableSource style='margin-top:.1pt'><span lang=EN-US
  style='font-size:9.0pt'>See </span><span lang=EN-US><a href="#com-interfaces"><span
  style='font-size:9.0pt'>COM section</span></a></span><span lang=EN-US
  style='font-size:9.0pt'>.</span></p>
  </td>
 </tr>
</table>

<p class=MsoBodyText style='margin-top:6.0pt'><span lang=EN-US>All definitions
occur in the package where the C declaration block is. The name of the defined
entity is obtained from the corresponding C name. If case insensitivity is a
problem and two names collide, the </span><span class=Typewriter><span
lang=EN-US style='font-size:11.0pt'>:translate</span></span><span lang=EN-US>
parameter can be used to rename one of them. </span></p>

<p class=MsoBodyText><span lang=EN-US>By default, the defined symbols are not
exported. They may be exported individually, but </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>:export</span><span
lang=EN-US> translation parameter allows to export all the defined names. </span></p>

<h3><a name="_Toc533948735"></a><a name=NameTranslation></a><span lang=EN-US>Name
Translation</span></h3>

<p class=MsoBodyText><span lang=EN-US>In some cases, control over name
translation is required. It is provided by three translation parameters. In
order of increasing power (and decreasing convenience) they are </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>:auto-ansi</span></span><span
lang=EN-US>, </span><span class=Typewriter><span lang=EN-US style='font-size:
11.0pt'>:ansi</span></span><span lang=EN-US>:, and </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>:translate</span></span><span
lang=EN-US>. </span></p>

<p class=Paramsolo><a name="param_auto_ansi"></a><span lang=EN-US>auto-ansi</span></p>

<p class=NumStepIndent><span lang=EN-US>This parameter is a generalized
boolean. When true, the parser translates any function name that looks like an
ANSI-specific version of the &quot;actual&quot; function (that is, the last
character is an uppercase &quot;A&quot; while the preceding character is
lowercase), to a Lisp name with the last character thrown away.</span></p>

<p class=NumStepIndent><span lang=EN-US>This parameter is true by default,
which means that &quot;CreateWindowA&quot;, for example, produces Lisp function
</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CREATEWINDOW</span><span
lang=EN-US> still using &quot;CreateWindowA&quot; as the DLL entry point name.</span></p>

<p class=NumStepIndent><span lang=EN-US>Note that this translation is only
applied to function names. Types and constants are typically all uppercase and
the rule used to determine if the name is an ANSI-specific version would not
work for them. To avoid global edits to change all </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CREATESTRUCTA</span><span
lang=EN-US> to </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>CREATESTRUCT</span><span lang=EN-US> in a large body of text,
the following parameter is useful.</span></p>

<p class=Paramsolo><a name="param_trim_last"></a><span lang=EN-US>trim-last</span></p>

<p class=NumStepIndent><span lang=EN-US>The value of this parameter should be a
string or a list of strings. Whenever the parser translates a C name to a Lisp
name, it looks up the name in this list (the lookup is case-sensitive). If
found, the parser trims the last character of the name to get the name of the
Lisp symbol to use.</span></p>

<p class=NumStepIndent><span lang=EN-US>For example, if you specify</span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'> :trim-last
&quot;LPCREATESTRUCTA&quot;</span></span><span lang=EN-US> in a C block header,
this name will be translated to </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>LPCREATESTRUCT</span><span lang=EN-US> wherever it
is mentioned in the block, be it a defined type name, or a function parameter
type.</span></p>

<p class=Paramsolo><a name="param_translate"></a><span lang=EN-US>translate</span></p>

<p class=NumStepIndent><span lang=EN-US>If even more control over name
translation is required, this parameter allows to specify arbitrary
translations. The value of it should be a list of two-element lists. The first
element of each list is a string specifying a C name, the second element is a
symbol to use as the translation of that name. For example, the following could
be used to resolve name conflict:</span></p>

<p class=DefinitionList style='margin-top:5.0pt;margin-right:0cm;margin-bottom:
5.0pt;margin-left:18.0pt'><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>:translate ((&quot;foo&quot; small-foo)
(&quot;FOO&quot; big-foo))</span></span></p>

<h3><a name="_Toc533948736"></a><a name="C_Syntax"></a><span lang=EN-US>Supported
C Syntax</span></h3>

<p class=MsoBodyText><span lang=EN-US>Typically, in order to import C
declarations, you would copy a block of declarations from an .H file and paste
it into a declaration block in a .lisp file. However, the parser supports only
a subset of C syntax, therefore it is essential to understand the differences
between the &quot;regular&quot; C and the language understood by the parser.
Some of the copied declarations would have to be removed, others slightly edited.
In practice, however, the majority of declarations can be used &quot;as
is&quot;. In any event, tweaking C declarations to fit the parser limitations
is much easier than writing the corresponding Lisp FFI declarations by hand. </span></p>

<h4 style='page-break-before:always'><a name="case_sensitivity"></a><span
lang=EN-US>Case Sensitivity</span></h4>

<p class=MsoBodyText><span lang=EN-US>Each declared C name is translated into a
definition associated with a Lisp symbol. By default, symbol naming in Lisp is
case-insensitive. This means that declarations for &quot;foo&quot; and
&quot;FOO&quot; would clash when translated to Lisp. This is unlikely to often
be a concern, but if it is, </span><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>:translate</span></span><span lang=EN-US> parameter
can be used to specify an alternative translation for a name. </span></p>

<h4><a name=packages></a><span lang=EN-US>Packages</span></h4>

<p class=MsoBodyText><span lang=EN-US>All symbols for the C definitions are
created in the package current at the time the parser was invoked. If a
declaration refers to other declaration names, the symbols for those names
should be visible, or an error will be signaled by the FFI. For instance, the
declaration block at the beginning of this document can only be translated
somewhere where the symbols from the &quot;</span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WIN32</span><span
lang=EN-US>&quot; package for names such as &quot;</span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>HDC</span><span lang=EN-US>&quot;
or &quot;</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>LPARAM</span><span
lang=EN-US>&quot; are visible. </span></p>

<h4><a name="define_semantics"></a><span lang=EN-US>#define semantics</span></h4>

<p class=MsoBodyText><span lang=EN-US>In C, </span><span class=Typewriter><span
lang=EN-US style='font-size:11.0pt'>#define</span></span><span lang=EN-US>
defines token substitution. As far as this parser is concerned, </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>#define</span></span><span
lang=EN-US> defines a constant. This means that the parser expects a valid
expression on the right hand side, and the expression is evaluated to produce a
value which is assigned to the constant. This means that some cases, such as </span></p>

<p class=Preformatted><span lang=EN-US style='font-size:11.0pt'>#define
TIMES2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *2</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US
style='font-size:11.0pt'>#define TWOHUNDRED&nbsp;&nbsp;&nbsp; 100 TIMES2</span></p>

<p class=MsoBodyText><span lang=EN-US>are legal in C but not legal for this
parser (it does not perform token substitution), other cases, such as </span></p>

<p class=Preformatted><span lang=EN-US style='font-size:11.0pt'>#define
FOO&nbsp;&nbsp;&nbsp; 3 + 4</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US
style='font-size:11.0pt'>#define BAR&nbsp;&nbsp;&nbsp; (FOO * 6)</span></p>

<p class=MsoNormal><span lang=EN-US>are interpreted differently. For a C
preprocessor, BAR is '3 + 4 * 6', and the effective value used in place of B
somewhere in C would be 27. For this parser, BAR is (* FOO 6), and FOO is (+ 3
4), so the effective value of BAR would be 72. </span></p>

<p class=MsoBodyText><span lang=EN-US>The expressions are supposed to be
arithmetic only; that is, the terms may only be identifiers, literal numbers,
or literal strings. </span></p>

<p class=MsoBodyText style='page-break-before:always'><span lang=EN-US>The
following operators are supported (in order of decreasing priority): </span></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:.9pt;border-collapse:collapse'>
 <tr>
  <td width=47 style='width:35.05pt;border:solid black 1.0pt;border-right:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=center style='text-align:center'><span
  class=Typewriter><span lang=EN-US style='font-size:11.0pt'>- ~</span></span></p>
  </td>
  <td width=354 style='width:265.4pt;border:solid black 1.0pt;padding:0cm 0cm 0cm 0cm'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:7.2pt'><span lang=EN-US>(Unary) negation and bitwise
  complement.</span></p>
  </td>
 </tr>
 <tr>
  <td width=47 style='width:35.05pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=center style='text-align:center'><span
  class=Typewriter><span lang=EN-US style='font-size:11.0pt'>* / %</span></span></p>
  </td>
  <td width=354 style='width:265.4pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:7.2pt'><span lang=EN-US>Multiplication, division, and
  modulus.</span></p>
  </td>
 </tr>
 <tr>
  <td width=47 style='width:35.05pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=center style='text-align:center'><span
  class=Typewriter><span lang=EN-US style='font-size:11.0pt'>+ -</span></span></p>
  </td>
  <td width=354 style='width:265.4pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:7.2pt'><span lang=EN-US>Addition and subtraction.</span></p>
  </td>
 </tr>
 <tr>
  <td width=47 style='width:35.05pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=center style='text-align:center'><span
  class=Typewriter><span lang=EN-US style='font-size:11.0pt'>&amp;</span></span></p>
  </td>
  <td width=354 style='width:265.4pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:7.2pt'><span lang=EN-US>Bitwise AND.</span></p>
  </td>
 </tr>
 <tr>
  <td width=47 style='width:35.05pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=center style='text-align:center'><span
  class=Typewriter><span lang=EN-US style='font-size:11.0pt'>^</span></span></p>
  </td>
  <td width=354 style='width:265.4pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:7.2pt'><span lang=EN-US>Bitwise XOR.</span></p>
  </td>
 </tr>
 <tr>
  <td width=47 style='width:35.05pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=center style='text-align:center'><span
  class=Typewriter><span lang=EN-US style='font-size:11.0pt'>|</span></span></p>
  </td>
  <td width=354 style='width:265.4pt;border:solid black 1.0pt;border-top:none;
  padding:0cm 0cm 0cm 0cm'>
  <p class=MsoBodyText style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:7.2pt'><span lang=EN-US>Bitwise OR.</span></p>
  </td>
 </tr>
</table>

<p class=MsoBodyText style='margin-top:6.0pt'><span lang=EN-US>Since </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>#define</span></span><span
lang=EN-US> is not token substitution for this parser, </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>#define</span></span><span
lang=EN-US> with arguments is not allowed. </span></p>

<p class=MsoBodyText><span lang=EN-US>Some other preprocessor directives are
recognized, namely: </span><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>#if, #ifdef, #ifndef, #else, #endif</span></span><span
lang=EN-US>. They are ignored with a warning. (A warning is needed because when
these declarations are ignored, incorrect definitions may be included in the
resulting translation). </span></p>

<h4><span lang=EN-US>#LISP escape</span></h4>

<p class=MsoBodyText><span lang=EN-US>In some cases, a Lisp construct should
accompany the body of C definitions. One of the cases when this may be required
is when #define is used to declare a macro with parameters, not supported by
the C declaration parser. In this case, a Lisp function or macro should be
defined equivalent to the original C macro. While it is possible to add such a
definition before or after the C declaration block, it is often convenient to
place it in the C declaration block, next to the commented-out original C
declaration. The </span><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>#LISP</span></span><span lang=EN-US> escape makes this
possible. If a keyword </span><span class=Typewriter><span lang=EN-US
style='font-size:11.0pt'>#LISP</span></span><span lang=EN-US> is encountered in
a C declaration block, the form following it is read by the regular Lisp reader
and the result is embedded into the sequence of FFI statements produced as the
result of translating the C declaration block. Here is an example taken from
the declaration block of ODBC 3.0 interface: </span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>/* test for SQL_SUCCESS or
SQL_SUCCESS_WITH_INFO */</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>// #define SQL_SUCCEEDED(rc)
(((rc)&amp;(~1))==0)</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>#LISP (progn</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(export 'SQL_SUCCEEDED)</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>(defun SQL_SUCCEEDED (rc) (zerop (logandc2
rc 1))))</span></p>

<h4 style='page-break-before:always'><a name="type_definitions"></a><span
lang=EN-US>Type Definitions</span></h4>

<p class=MsoBodyText><span lang=EN-US>Only type declarations matching the
following template are supported: </span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><b><span lang=EN-US>typedef</span></b><span lang=EN-US>
&lt;type &lt;pointers &lt;name &lt;dimension?</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>&lt;pointers ::= <b>'*'</b>*</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>&lt;dimension ::= <b>'['</b> &lt;integer |
&lt;identifier <b>']'</b></span></p>

<p class=MsoBodyText><span lang=EN-US>In other words, no pointers to functions,
parentheses to specify priority, etc. More complicated types have to be broken
into simple parts that fit the above pattern and gradually defined in terms of
each other. </span></p>

<p class=MsoBodyText><span lang=EN-US>Once again, because #define does not
define token substitution, the following declaration is not supported: </span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>#define ASIZE 10</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>typedef int *pintarray[ASIZE];</span></p>

<p class=MsoBodyText><span lang=EN-US>The size of the array must be an integer
or an identifier. In this case the identifier should be a constant defined
either earlier in the same C declaration block, or existing in the system by
the time the declaration block's translation is evaluated. </span></p>

<p class=MsoBodyText><span lang=EN-US>These limitations also apply to other
type declarations: declarations of struct members, struct types (the part of
typedef struct following the closing brace), function (including COM methods)
parameter and return types. </span></p>

<h4><a name="struct_definitions"></a><span lang=EN-US>Structure Definitions</span></h4>

<p class=MsoBodyText><span lang=EN-US>Both </span><span class=Typewriter><span
lang=EN-US style='font-size:11.0pt'>struct</span></span><span lang=EN-US> and </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>typedef struct</span></span><span
lang=EN-US> are acceptable. </span></p>

<p class=MsoBodyText><span lang=EN-US>In the former case, the structure tag is
used as the type being defined, while variable declarations following the
structure body are ignored. </span></p>

<p class=MsoBodyText><span lang=EN-US>In the latter case, if a field list is
supplied, the structure tag is ignored. The variable declarations following the
struct body are all used to define the related types. Any typedef struct should
define at least one <i>primary type name</i>—the name of the structure type
itself. All other related types are defined in terms of the primary type. In
the above example, MSG is the primary type, while LPMSG and others are defined
in terms of it. An error is signaled if there is no primary type in a </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>typedef struct</span></span><span
lang=EN-US> statement. </span></p>

<p class=MsoBodyText><span lang=EN-US>If there is no field list supplied in a
&quot;typedef struct&quot; declaration, the structure tag is assumed to be
defined earlier using &quot;struct&quot; declaration. The types declared in the
declaration are then declared based on the structure tag, as shown in the </span><span
lang=EN-US><a href="#struct-and-typedef-struct-example">example above</a></span><span
lang=EN-US>. </span></p>

<p class=MsoBodyText><span lang=EN-US>In the struct body and the variable list,
the limitations described in the </span><span lang=EN-US><a
href="#type-definitions">Type Definitions</a></span><span lang=EN-US> section
apply. </span></p>

<h4><a name="function_definitions"></a><span lang=EN-US>Function Definitions</span></h4>

<p class=MsoBodyText><span lang=EN-US>Most function prototypes typically found
in Windows .H files are acceptable. The limitations on argument declaration
complexity described in </span><span lang=EN-US><a href="#type-definitions">Type
Definitions</a></span><span lang=EN-US> section apply. </span></p>

<p class=MsoBodyText><span class=Typewriter><span lang=EN-US style='font-size:
11.0pt'>pascal</span></span><span lang=EN-US>, or </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>_pascal</span></span><span
lang=EN-US> keywords in the function prototype cause the function to use :pascal
linkage. The function will also use :pascal linkage if its prototype contains
one of the tokens specified in the </span><span class=Typewriter><span
lang=EN-US style='font-size:11.0pt'>:pascal</span></span><span lang=EN-US>
keyword parameter in the block's translation parameters. Often, with Win32 USER
module declarations such a parameter would be used to specify &quot;</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WINAPI</span><span
lang=EN-US>&quot; as a pascal linkage selector. If none of the above is the
case, a function uses <b>:c</b> linkage. </span></p>

<p class=MsoBodyText><span lang=EN-US>The DLL entry name is always the one
matching the function name as it appears in the C declaration. The name of the
corresponding Lisp function can be different if </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>:auto-translate-ansi</span><span
lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>:ansi</span><span lang=EN-US> or </span><b><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>:translate</span></b><span
lang=EN-US> settings are used (see translation parameters description). As an
example, </span></p>

<p class=Preformatted><span lang=EN-US>#! (:library &quot;User32&quot;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:ignore &quot;WINUSERAPI&quot;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:pascal &quot;WINAPI&quot;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:trim-last &quot;WNDCLASSA&quot;)</span></p>

<p class=Preformatted style='margin-right:-13.5pt'><span lang=EN-US>WINUSERAPI
ATOM WINAPI RegisterClassA( CONST WNDCLASSA *lpWndClass);</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US>!#</span></p>

<p class=MsoNormal style='margin-bottom:6.0pt'><span lang=EN-US>produces Lisp
definition: </span></p>

<p class=Preformatted><span lang=EN-US>(DEFWINAPI REGISTERCLASS ((LPWNDCLASS
(WNDCLASS *)))</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:RETURN-TYPE ATOM</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:LIBRARY-NAME &quot;User32.dll&quot;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:ENTRY-NAME &quot;RegisterClassA&quot;</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>:LINKAGE-TYPE :PASCAL)</span></p>

<p class=MsoBodyText><span lang=EN-US>The function name has been
auto-translated because this is the default setting in the Win32 translation
mode, the </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WNDCLASSA</span><span
lang=EN-US> type name is translated to </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>WNDCLASS</span><span
lang=EN-US> because it is explicitly declared as ANSI-mangled. </span></p>

<h4 style='page-break-before:always'><a name="com_interfaces"></a><span
lang=EN-US>COM Interfaces</span></h4>

<p class=MsoBodyText><span lang=EN-US>The definitions from the Corman Lisp
examples: </span></p>

<p class=Preformatted><span lang=EN-US>interface IUnknown {</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>HRESULT QueryInterface(REFIID riid, LPVOID*
ppvObject);</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>ULONG AddRef();</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>ULONG Release();</span></p>

<p class=Preformatted><span lang=EN-US>};&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US>interface IMalloc : IUnknown {</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>LPVOID Alloc(ULONG cb);&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>LPVOID Realloc(LPVOID pv, ULONG cb);&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>VOID Free(LPVOID pv);&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>ULONG GetSize(LPVOID pv);&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>int DidAlloc(LPVOID pv);&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span><span lang=EN-US>VOID HeapMinimize();</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US>};</span></p>

<p class=MsoBodyText><span lang=EN-US>are translated to the following Lisp
form. Note that extra care is taken to make sure interfaces use method lists of
the parent interfaces at the evaluation time as opposed to the method list in
the time of macro expansion. </span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>(PROGN</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(LET ((#:G851 0))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD QUERYINTERFACE-IUNKNOWN&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>((WIN32:INTERFACE *)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(RIID REFIID)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(PPVOBJECT (LPVOID *)))&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G851 0)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE HRESULT)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD ADDREF-IUNKNOWN ((WIN32:INTERFACE *))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G851 1)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE ULONG)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD RELEASE-IUNKNOWN ((WIN32:INTERFACE *))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G851 2)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE ULONG)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(SETF (INTERFACE-METHOD-LIST 'IUNKNOWN)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(APPEND NIL '(QUERYINTERFACE-IUNKNOWN</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>ADDREF-IUNKNOWN</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>RELEASE-IUNKNOWN))))&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(LET ((#:G852 (LENGTH (INTERFACE-METHOD-LIST 'IUNKNOWN))))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD ALLOC-IMALLOC ((WIN32:INTERFACE *) (CB ULONG))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G852 0)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE LPVOID)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD REALLOC-IMALLOC ((WIN32:INTERFACE *)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(PV LPVOID)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(CB ULONG))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G852 1)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE LPVOID)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD FREE-IMALLOC ((WIN32:INTERFACE *) (PV LPVOID))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G852 2)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE VOID)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD GETSIZE-IMALLOC ((WIN32:INTERFACE *) (PV LPVOID))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G852 3)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE ULONG)</span></p>

<p class=Preformatted style='margin-right:-13.5pt'><span lang=EN-US
style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD DIDALLOC-IMALLOC ((WIN32:INTERFACE *) (PV LPVOID))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G852 4)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE :LONG)</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(DEFUN-COM-METHOD HEAPMINIMIZE-IMALLOC ((WIN32:INTERFACE *))</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(+ #:G852 5)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>:RETURN-TYPE VOID)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(SETF (INTERFACE-METHOD-LIST 'IMALLOC)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>(APPEND (INTERFACE-METHOD-LIST 'IUNKNOWN)&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>'(ALLOC-IMALLOC&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>REALLOC-IMALLOC&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>FREE-IMALLOC</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>GETSIZE-IMALLOC&nbsp;</span></p>

<p class=Preformatted><span lang=EN-US style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>DIDALLOC-IMALLOC</span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><span lang=EN-US
style='font-size:9.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US style='font-size:9.0pt'> </span><span lang=EN-US style='font-size:
9.0pt'>HEAPMINIMIZE-IMALLOC)))))</span></p>

<h3><a name="_Toc533948737"><span lang=EN-US>Transcribing Lisp Files</span></a></h3>

<p class=MsoBodyText><span lang=EN-US>It is possible to convert a file
containing Lisp forms and C declaration blocks into a file containing only Lisp
forms, with all C declarations replaced with their Corman Lisp FFI equivalents.
This operation is performed by the following function. </span></p>

<p class=Preformatted style='margin-bottom:6.0pt'><b><span lang=EN-US>transcribe-file</span></b><span
lang=EN-US> in-file out-file &amp;optional (package *package*) (prettyp t)</span></p>

<p class=MsoBodyText><span lang=EN-US>Opens </span><span class=Typewriter><span
lang=EN-US style='font-size:11.0pt'>in-file</span></span><span lang=EN-US>,
reads all forms in it and writes them into </span><span class=Typewriter><span
lang=EN-US style='font-size:11.0pt'>out-file</span></span><span lang=EN-US>.
(Both parameters are strings). The output file will have Lisp FFI declarations
expanded in place of C declarations. The original formatting and the comments
are, of course, lost. The optional </span><span class=Typewriter><span
lang=EN-US style='font-size:11.0pt'>prettyp</span></span><span lang=EN-US>
parameter, a generalized boolean, determines whether the output file forms are
printed prettily or not. </span></p>

<p class=MsoBodyText><span lang=EN-US>Transcribing the file eliminates the need
for C parsing when the file is loaded into Lisp, while Lisp FFI forms are
easier to parse than the original C declarations. The speed gain, depending on
the file, may range from 5 to 50%. Care should be taken, however, to ensure
that a proper package is used while the file is being transcribed, or the
symbols printed in the output file may appear to be interned incorrectly when
the output file is loaded. To control this, optional </span><span
class=Typewriter><span lang=EN-US style='font-size:11.0pt'>package</span></span><span
lang=EN-US> parameter (a package designator) may be used. </span></p>

<p class=MsoNormal style='page-break-before:always'><b><span lang=EN-US
style='font-size:8.0pt'>&nbsp;</span></b></p>

<h1><a name="_Toc533948738"><span lang=EN-US>14  ANSI Common Lisp Compatibility</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>Corman Lisp has been developed according
to the ANSI Common Lisp specification. However, the specification is very large,
and it is unfortunately not possible to offer a 100% ANSI compliant
implementation at this time. The vast majority of ANSI functions are included,
all the data types, and the majority of the specified functionality and
behaviors. Any deficiencies regarding ANSI compatibility will be addressed in
future releases. In the 3.0 release, a lot of progress has been made toward
complete standard compliance. </span></p>

<h2 style='page-break-before:always'><a name="_Toc533948739"><span lang=EN-US>CLOS</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>The CLOS implementation in Corman Lisp
was originally based on the Closette implementation in the book <i>The Art of
the Metaobject Protocol<b> </b></i>by Gregor Kiczales, Jim des Rivières, and
Daniel G. Bobrow. The source to this implementation is included (in the file </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>clos.lisp</span><span
lang=EN-US> in the </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>library</span><span lang=EN-US> folder). This implementation of
CLOS is a subset of the full ANSI CLOS specification, and included non-ANSI
extensions which provide a metaobject protocol (MOP). The following limitations
apply (according to Chapter 1, section 1.1 of the book):</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><span lang=EN-US>All the essential features of full CLOS
are included: <i>classes</i>, which inherit structure and behavior from one or
more classes, <i>instances</i> of classes, which are created, initialized and
manipulated; <i>generic functions</i>, whose behavior depends on the classes of
the arguments supplied to them; and <i>methods</i> which define the
class-specific behavior and operations of generic functions. The major
restrictions of the simplified dialect include:</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>No class redefinition. </span></b><span
lang=EN-US>Full CLOS allows the definition of a class to be changed; the
changes are propagated to its subclasses and to extant instances. The subset
does not allow classes to be redefined.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><span lang=EN-US>[Corman Lisp modification: This
restriction has been removed. Classes may be redefined, but existing instances
are not properly updated as specified by ANSI CL.]</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>No method redefinition. </span></b><span
lang=EN-US>Full CLOS allows methods to be redefined, with the new definition
completely replacing the old one. The subset does not allow methods to be
redefined.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><span lang=EN-US>[Corman Lisp modification: This
restriction has been removed. Methods may be redefined.]</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>No forward-referenced superclasses. </span></b><span
lang=EN-US>Full CLOS allows classes to be references before they are defined.
One class can be defined in terms of another before the second has been
defined. These forward references are not permitted in the subset.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>Explicit generic function definitions.</span></b><span
lang=EN-US> Full CLOS allows the definition of a generic function to be
inferred from the method definitions. The subset requires that a generic
function be explicitly introduced with a </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>defgeneric</span><span
lang=EN-US> form before any methods are defined on it.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><span lang=EN-US>[Corman Lisp modification: This
restriction has been removed. </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DEFMETHOD</span><span lang=EN-US> forms do not
require a preceding </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>DEFGENERIC</span><span lang=EN-US>.]</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>Standard method combination only. </span></b><span
lang=EN-US>Full CLOS provides a powerful mechanism for user control of method
combination. The subset defines only simple &quot;demon&quot; combination
(primary, before- and after- methods).</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>No </span></b><b><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>eql</span></b><b><span
lang=EN-US> specializers.</span></b><span lang=EN-US> Full CLOS allows methods
to be specialized not only to classes, but also to individual objects. The
subset restricts method specialization to classes.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><span lang=EN-US>[Corman Lisp modification: EQL specifiers
are now supported.]</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>No slots with :class allocation. </span></b><span
lang=EN-US>Full CLOS supports slots allocated in each instance of a class, and
slots which are shared across all of them. The subset defines only per-instance
slots.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>Types and classes not fully integrated.
</span></b><span lang=EN-US>Full CLOS closely integrates Common Lisp types and
CLOS classes. It is possible to define methods specialized to primitive classes
(e.g. </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>symbol</span><span
lang=EN-US>) and structure classes (defined with </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>defstruct</span><span
lang=EN-US>). The subset defines classes for the primitive Common Lisp types
but not for structure classes.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><span lang=EN-US>[Corman Lisp modification: Structures have
unique classes and may be used to specialize methods.]</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><b><span lang=EN-US>Minimal syntactic sugar. </span></b><span
lang=EN-US>A number of convenience macros and special forms are not included in
the subset. These include </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>with-slots, generic function, generic-flet and
generic-labels.</span></p>

<p class=bodytext style='margin-top:0cm;margin-right:36.0pt;margin-bottom:6.0pt;
margin-left:36.0pt'><span lang=EN-US>[Corman Lisp modification: </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>WITH-SLOTS</span><span
lang=EN-US> is implemented, courtesy of Vassili Bykov.]</span></p>

<p class=MsoBodyText><span lang=EN-US>The book is highly recommended if you
want to work with CLOS. The file </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>clos-tests.lisp,</span><span lang=EN-US> included
with Corman Lisp in the examples folder, contains most of the code samples from
the book, and is useful for seeing how CLOS works.</span></p>

<p class=MsoBodyText><span lang=EN-US>In Corman Lisp, the original Closette has
been modified and rewritten extensively, especially with regard to generic
function invocation. This has been done to improve performance, which is now
substantially better than in previous versions.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948740"><span lang=EN-US>15 
Conditions</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>Much of the code to implement the ANSI
condition system is in place (and included) it is not yet integrated with the
Common Lisp library functions i.e. few functions signal conditions at this
time. Work on this is ongoing.</span></p>

<p class=MsoNormal style='page-break-before:always'><b><span lang=EN-US
style='font-size:8.0pt'>&nbsp;</span></b></p>

<h1><a name="_Toc533948741"><span lang=EN-US>16  Profiler</span></a></h1>

<h2><a name="_Toc533948742"><span lang=EN-US>Profiler Functions</span></a></h2>

<h3><a name="_Toc533948743"><span lang=EN-US>PROFILING</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>PROFILING</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>(funcs)
&amp;rest body</span></i><i><span lang=EN-US style='font-size:11.0pt;
font-weight:normal'>                                                    </span></i><i><span
lang=EN-US style='font-weight:normal'> [macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>funcs</span></i><span lang=EN-US> should be a list of function
names to be profiled. These are not evaluated.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-family:"Courier New"'>body</span></i><span
lang=EN-US> is a list of forms to be evaluated. These form an implicit </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>PROGN</span><span
lang=EN-US> to be evaluated while profiling the functions specified.</span></p>

<p class=NumStepIndent><span lang=EN-US>The profiler timings will be inflated
somewhat, because turning profiling on slows down execution. It is mainly
useful for determining relative execution timings. Also, recursive functions
will have their timings overstated, because the timings reflect the sum of
times of all the invocations of a function. The timing is the time from when a
function is entered to the time it is exited. It includes time spent in functions
that it calls.</span></p>

<p class=NumStepIndent><span lang=EN-US>After the profiled forms are executed,
a listing will be printed of how much time, in seconds, was spent in each
profiled function. The profiler timings will be inflated somewhat, because
turning profiling on slows down execution. It is mainly useful for determining
relative execution timings. Also, recursive functions will have their timings
overstated, because the timings reflect the sum of times of all the invocations
of a function. The timing is the time from when a function is entered to the
time it is exited. It includes time spent in functions that it calls.</span></p>

<p class=MsoNormal style='page-break-before:always'><b><span lang=EN-US
style='font-size:8.0pt'>&nbsp;</span></b></p>

<h1><a name="_Toc533948744"><span lang=EN-US>17  Creating Standalone
Applications</span></a></h1>

<h2><a name="_Toc533948745"><span lang=EN-US>Application Functions</span></a></h2>

<h3><a name="_Toc533948746"><span lang=EN-US>SAVE-APPLICATION</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>SAVE-APPLICATION</span><span
lang=EN-US style='font-size:10.0pt'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>application-name
start-function</span></i><i><span lang=EN-US style='font-weight:normal'>     [function]</span></i></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>        <i>&amp;key
(console nil) (static nil)</i></span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>application-</span></i><i><span lang=EN-US style='font-family:
"Courier New"'>name</span></i><span lang=EN-US> should the name of the
application to be created. If the name does not end with a .EXE extension, one
will be added automatically.</span></p>

<p class=NumStepIndent><span lang=EN-US>This function will create an executable
in the <b><i>output directory</i></b> if absolute executable pathname was not
given <i>(See Section 6, Subsection “User Specific Files and Directories” for
details)</i>.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>start-function </span></i><span lang=EN-US>is the function which
will be invoked as the top-level function in the saved application. It should
do any necessary initialization, and launch the application.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>console </span></i><span lang=EN-US>defaults to</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'> NIL. </span><span
lang=EN-US>If true, it will create a standalone console application. If </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span
lang=EN-US>, it will create a Windows application. A Windows application is
responsible for all its own input and output. No edit window for receiving or
displaying text will be provided.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>static </span></i><span lang=EN-US>defaults to</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'> NIL</span><span
lang=EN-US>. If true, the CormanLispServer DLL will be statically linked to the
resulting application. This allows the application to be distributed as a
single file, without including a separate DLL. It also prevents a different
version of the CormanLispServer from inadvertently causing a problem later. If </span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>static</span></i><span
lang=EN-US> is nil, the CormanLispServer DLL is required, but the resulting
application will be smaller by around 300k bytes.</span></p>

<p class=NumStepIndent><span lang=EN-US>Note that the saved lisp code is now
stored directly in the .exe file, and a separate .IMG file is not created or
required.</span></p>

<p class=NumStepIndent><span lang=EN-US>Use </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span><span
lang=EN-US> to create a binary application which can be launched from Windows
just like any other application. Before using this function, you should do the
following steps:</span></p>

<p class=NumStep2><span lang=EN-US>4.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Start Corman Lisp.</span></p>

<p class=NumStep2><span lang=EN-US>5.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Load exactly what you need to execute your
application, using the Lisp </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>LOAD</span><span lang=EN-US> command or the <b>Execute
File…</b> menu command.</span></p>

<p class=NumStep2><span lang=EN-US>6.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Call </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span><span lang=EN-US> with
appropriate parameters.</span></p>

<p class=NumStepIndent><span lang=EN-US>If you want to create another
application, you should exit Corman Lisp and follow the above steps again.
Everything that you do in Corman Lisp, prior to executing </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>SAVE-APPLICATION</span><span
lang=EN-US>, will affect the heap image and the saved application, so it
important to start fresh each time.</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>SAVE-APPLICATION </span><span lang=EN-US>actually does the
following things:</span></p>

<p class=NumStepIndent><span lang=EN-US>It creates a clone of one of the
supplied bootstrapping applications, clboot.exe, clbootapp.exe or
clconsole.exe.</span></p>

<p class=NumStepIndent><span lang=EN-US>If the console key parameter is NIL it
uses clboot.exe, otherwise it will use clconsole.exe. The cloned application is
very small, and will have the name of the application you are creating.</span></p>

<p class=NumStepIndent><span lang=EN-US>The variable </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>*top-level* </span><span
lang=EN-US>is set to the passed start-function.</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>SAVE-IMAGE</span><span lang=EN-US> is called to create a copy of
the lisp heap in the .EXE file in a segment of that file called </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.lisp</span><span
lang=EN-US>.</span></p>

<p class=NumStepIndent><span lang=EN-US>You launch the resulting application by
double-clicking on the application file with the .EXE extension. When you
distribute this application, you must distribute either one or two files,
depending whether </span><i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>static</span></i><span lang=EN-US> was true
(assuming your application is named </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>appname</span></i><span
lang=EN-US>):</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>Appname.EXE</span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:6.0pt'><span
lang=EN-US>CormanLispServer.DLL </span><span lang=EN-US style='font-size:12.0pt;
font-family:"Garamond",serif'>(if you did not use</span><span lang=EN-US
style='font-size:10.0pt;font-family:"Garamond",serif'> </span><span lang=EN-US>:static
t</span><span lang=EN-US style='font-size:10.0pt;font-family:"Garamond",serif'>)</span></p>

<p class=NumStepIndent><span lang=EN-US>The </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CormanLispServer.DLL</span><span
lang=EN-US> is shared by all applications which are built with Corman Lisp. It
is a registered COM server, and only one instance of it is required on a given
workstation.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948747"><span lang=EN-US>18 
Creating DLLs</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>You can create DLLs in Corman Lisp which
may be called from any Windows applications. Since most application plug-in
architectures are based on DLLs, this allows Corman Lisp code to be used to
create plug-ins and extensions for a variety of applications. It also allows
you to conveniently use lisp functionality within a program written in another
language.</span></p>

<p class=MsoBodyText><span lang=EN-US>This section describes the function, </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US>, which you use to create a DLL. It also explains how you can build
and run an example program. Finally, technical information regarding the DLL
runtime model is provided. For further information about DLLs, refer to
“Microsoft Portable Executable and Common Object File Format Specification”,
which is available from Microsoft.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948748"><span lang=EN-US>COMPILE-DLL</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US style='font-weight:normal'> </span><span lang=EN-US
style='font-size:9.0pt;font-family:"Courier New";font-weight:normal'>input-file</span><span
lang=EN-US style='font-size:9.0pt;font-family:Monaco;font-weight:normal'>                                      </span><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>        &amp;key
output-file</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>             (verbose
*compile-verbose*)</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>             (print
*compile-print*)</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>             def</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>             h</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>             (kernel
&quot;CormanLispServer.dll&quot;)</span></i></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>             (image
&quot;CormanLisp.img&quot;)</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>output-file</span></i><span lang=EN-US> is the name of the .lisp
file which you wish to compile as a DLL. Functions defined with the macros </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:black'>defun-dll-export-function</span><span
lang=EN-US style='font-family:"Courier New";color:black'> and </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:black'>defun-dll-export-c-function</span><span
lang=EN-US style='color:black'> will be exported from the DLL.</span></p>

<p class=NumStepIndent><b><span lang=EN-US style='color:black'>NOTE:</span></b><span
lang=EN-US style='color:black'> The DLL will be created in the <b><i>output
directory</i></b> if absolute DLL pathname was not given <i>(See Section 6,
Subsection “User Specific Files and Directories” for details)</i>.</span></p>

<p class=NumStepIndent><span class=programsourcenormalChar><i><span lang=EN-US
style='font-size:11.0pt'>verbose</span></i></span><span lang=EN-US> defaults to
</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span
lang=EN-US>. If true, causes extra information to be output to </span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:11.0pt'>*standard-output*</span></span><span
lang=EN-US>. This option gets passed on to </span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:11.0pt'>compile-file</span></span><span
lang=EN-US>.</span></p>

<p class=NumStepIndent><span class=programsourcenormalChar><i><span lang=EN-US
style='font-size:11.0pt'>print</span></i></span><span
class=programsourcenormalChar><i><span lang=EN-US style='font-size:9.0pt'> </span></i></span><span
lang=EN-US> defaults to </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>NIL</span><span lang=EN-US>. If true, causes extra
information to be output to </span><span class=programsourcenormalChar><span
lang=EN-US style='font-size:11.0pt'>*standard-output*</span></span><span
lang=EN-US>.</span></p>

<p class=NumStepIndent><span lang=EN-US>This option gets passed on to </span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:11.0pt'>compile-file</span></span><span
lang=EN-US>.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>def</span></i><i><span lang=EN-US style='font-size:9.0pt;
font-family:Monaco'> </span></i><span lang=EN-US>defaults to </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span
lang=EN-US>. If true, creates a </span><span class=programsourcenormalChar><span
lang=EN-US style='font-size:9.0pt'>.def</span></span><span lang=EN-US> file for
use by the linker when other applications are linked to this DLL. It will be
created in the same directory as the output DLL.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>h</span></i><i><span lang=EN-US style='font-size:9.0pt;
font-family:Monaco'> </span></i><span lang=EN-US>defaults to</span><span
lang=EN-US style='font-size:9.0pt;font-family:Monaco'> NIL. </span><span
lang=EN-US>If true, automatically creates a .h file which may be included in a
C or C++ program which is designed to link to the DLL. It will be created in
the same directory as the output DLL.</span></p>

<p class=NumStepIndent><span class=programsourcenormalChar><span lang=EN-US
style='font-size:11.0pt'>kernel</span></span><span lang=EN-US style='font-family:
Monaco'> </span><span lang=EN-US>defaults to </span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:11.0pt'>CormanLispServer.dll</span></span><span
lang=EN-US>. The DLL, when loaded, detects whether the Corman Lisp kernel is
loaded. If not, it loads it. This option allows a path other than the default
to be specified for this. </span></p>

<p class=NumStepIndent><b><span lang=EN-US>Note</span></b><span lang=EN-US>: It
is possible to copy the kernel DLL, and save a lisp image to the copied DLL
(using </span><span class=programsourcenormalChar><span lang=EN-US
style='font-size:11.0pt'>SAVE-IMAGE</span></span><span lang=EN-US>). This
allows the kernel and lisp image to reside in the same file. In this case,
specify the same name for both the </span><span class=programsourcenormalChar><i><span
lang=EN-US style='font-size:11.0pt'>kernel</span></i></span><span
class=programsourcenormalChar><i><span lang=EN-US style='font-size:9.0pt'> </span></i></span><span
lang=EN-US>and </span><span class=programsourcenormalChar><i><span lang=EN-US
style='font-size:11.0pt'>image</span></i></span><span lang=EN-US> keyword
options.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>image</span></i><i><span lang=EN-US style='font-size:9.0pt;
font-family:Monaco'> </span></i><span lang=EN-US>defaults to</span><span
lang=EN-US style='font-size:9.0pt;font-family:Monaco'> </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp.img</span><span
lang=EN-US>. If the Corman Lisp kernel needs to be loaded by the DLL (if not
already running) this option specifies the name of the Lisp image to load when
the kernel starts. See the note above, regarding the possibility of combining
these two files.</span></p>

<p class=NumStepIndent><span lang=EN-US>When your DLL is distributed, both the
kernel and lisp image files must accompany the distributed DLL for proper
execution. Your right to distribute these files is subject to the terms and
conditions in the Corman Lisp license agreement.</span></p>

<h3><a name="_Toc533948749"><span lang=EN-US>DEFUN-DLL-EXPORT-FUNCTION</span></a></h3>

<h3><a name="_Toc533948750"><span lang=EN-US>DEFUN-DLL-EXPORT-C-FUNCTION</span></a></h3>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>DEFUN-DLL-EXPORT-FUNCTION</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>name arglist</span></i><i><span lang=EN-US
style='font-size:9.0pt;font-family:Monaco;font-weight:normal'>                </span></i><span
lang=EN-US style='font-weight:normal'>[<i>macro</i>]</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>        &amp;optional
prototype</span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span
lang=EN-US>        &amp;rest forms</span></p>

<p class=FunctionTitle style='margin-bottom:0cm;margin-bottom:.0001pt'><span
lang=EN-US style='font-family:"Courier New"'>DEFUN-DLL-EXPORT-C-FUNCTION</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>name arglist</span></i><i><span lang=EN-US
style='font-size:9.0pt;font-family:Monaco;font-weight:normal'>              </span></i><span
lang=EN-US style='font-weight:normal'>[<i>macro</i>]</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>        &amp;optional
prototype</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>        &amp;rest forms</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>These macros are used to define
functions to be exported by a DLL (using </span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:11.0pt'>COMPILE-DLL</span></span><span
lang=EN-US>). If </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>DEFUN-DLL-EXPORT-FUNCTION</span><span lang=EN-US> is used, the
exported function will use Windows stdcall linkage. If </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>DEFUN-DLL-EXPORT-C-FUNCTION</span><span
lang=EN-US> is used, the exported function will use C linkage. DLLs used by C
programs typically have C linkage, and Windows operating system DLLs typically
use stdcall linkage. It doesn’t matter which you use, as long as any
applications which call functions exported by your DLL use the proper
declarations that correspond with the linkage type.</span></p>

<p class=NumStepIndent><span class=programsourcenormalChar><i><span lang=EN-US
style='font-size:11.0pt'>name</span></i></span><span lang=EN-US> is a symbol or
a list. If a symbol, the symbol names the lisp name for the function that will
be defined as the export function, and its </span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:11.0pt'>SYMBOL-NAME</span></span><span
lang=EN-US> is used as the exported name in the DLL. If you wish the exported
name to differ from the </span><span class=programsourcenormalChar><span
lang=EN-US style='font-size:11.0pt'>SYMBOL-NAM</span></span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:9.0pt'>E</span></span><span
lang=EN-US>, then a list can be specified consisting of two items: the symbol
used as the lisp name, and a string representing the DLL export name.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>arglist</span></i><span lang=EN-US style='font-size:9.0pt;
font-family:Monaco'> </span><span lang=EN-US>is a list of the form:</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>   </span><span lang=EN-US>      ((arg1-name 
arg1-c-type)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>     (arg2-name  arg2-c-type)</span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span
lang=EN-US>          etc.)</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>prototype</span></i><i><span lang=EN-US style='font-size:9.0pt;
font-family:Monaco'> </span></i><span lang=EN-US>if supplied, should be a
string which is used to build the C include file (.h file) used to link to the
function being defined by foreign code.</span></p>

<p class=NumStepIndent style='page-break-before:always;page-break-after:avoid'><i><span
lang=EN-US>Example</span></i><span lang=EN-US>:</span></p>

<p class=Indentprogramsourcenormal style='margin-right:-18.0pt'><span
lang=EN-US style='letter-spacing:-1.0pt'>(ct:defun-dll-export-c-function
(lisp-single-add &quot;lisp_single_add&quot;) </span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:ideograph-numeric'><span
lang=EN-US style='font-size:9.0pt;font-family:"Courier New";color:black'> </span><span
lang=EN-US style='font-size:9.0pt;font-family:"Courier New";color:black'>((x
:single-float)(y :single-float))</span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:ideograph-numeric'><span
lang=EN-US style='font-size:9.0pt;font-family:"Courier New";color:black'> </span><span
lang=EN-US style='font-size:9.0pt;font-family:"Courier New";color:black'>&quot;float
lisp_single_add(float a, float b)&quot;</span></p>

<p class=bodytext style='margin-left:36.0pt'><span lang=EN-US style='font-size:
9.0pt;font-family:"Courier New";color:black'> </span><span lang=EN-US
style='font-size:9.0pt;font-family:"Courier New";color:black'>(+ x y))</span></p>

<p class=NumStepIndent><b><span lang=EN-US>Exporting Functions Using __stdcall
Conventions</span></b></p>

<p class=NumStepIndent><span lang=EN-US>If you wish to export functions using </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>__stdcall</span><span
lang=EN-US> calling convention (sometimes known as WINAPI), you need to modify
the exported function name using Microsoft’s standard name-mangling scheme. In
this case we add an @ character followed by the number of bytes that will be
passed to the function. This should be 4 bytes for each argument, or 8 bytes of
each double-float argument. Here is an example:</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US> </span><span lang=EN-US>(ct:defun-dll-export-function
(lisp_add &quot;lisp_add@8&quot;) </span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>((x :long)(y :long))</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>&quot;long __stdcall lisp_add(long a, long b)&quot;</span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span
lang=EN-US>    </span><span lang=EN-US>(+ x y))</span></p>

<p class=NumStepIndent><span lang=EN-US>This function is called by the name </span><span
class=programsourcenormalChar><span lang=EN-US style='font-size:11.0pt'>lisp_add</span></span><span
lang=EN-US> from C or C++, and uses </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>__stdcall</span><span lang=EN-US> calling
conventions.</span></p>

<h2><a name="_Toc533948751"><span lang=EN-US>Examples</span></a></h2>

<h3><a name="_Toc533948752"><span lang=EN-US>DLLSample Example</span></a></h3>

<p class=NumStepIndent><span lang=EN-US>To build the DLLSample example perform
the following steps.</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US> </span><span lang=EN-US>(ccl::compile-dll
&quot;examples/dllsample.lisp&quot; </span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span lang=DE>:output-file
&quot;dllsample.dll&quot; </span></p>

<p class=Indentprogramsourcenormal><span lang=DE>     </span><span lang=FR>:verbose
t</span></p>

<p class=Indentprogramsourcenormal><span lang=FR>     </span><span lang=FR>:print
t </span></p>

<p class=Indentprogramsourcenormal><span lang=FR>     </span><span lang=FR>:def
t </span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span lang=FR>    
</span><span lang=EN-US>:h t)</span></p>

<p class=NumStepIndent><span lang=EN-US>This compiles the sample file </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>dllsample.lisp</span><span
lang=EN-US>, and builds the output DLL </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>dllsample.dll</span><span
lang=EN-US>. It also creates the .def file </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>dllsample.def</span><span
lang=EN-US>, and the C include file </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>dllsample.h</span><span lang=EN-US>.</span></p>

<p class=Indentprogramsourcenormal style='margin-top:0cm;margin-right:-27.35pt;
margin-bottom:3.0pt;margin-left:18.0pt;page-break-before:always'><span
lang=EN-US style='font-size:10.0pt;letter-spacing:-1.0pt'>(win::system
&quot;lib /def:dllsample.def /out:dllsample.lib /machine:x86&quot;)</span></p>

<p class=NumStepIndent><span lang=EN-US>This command runs the LIB command to
create an import library for load-time linking of a client application to the
DLL. The import library is called </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>dllsample.lib</span><span lang=EN-US>.</span></p>

<p class=NumStepIndent><b><span lang=EN-US>Note:</span></b><span lang=EN-US>
The last step requires that you have a copy of the Microsoft LIB utility
installed on your workstation.</span></p>

<h3><a name="_Toc533948753"><span lang=EN-US>Building the DLLClient Example</span></a></h3>

<p class=NumStepIndent><span lang=EN-US>To build the DLLClient example, you
must have Microsoft Visual Studio.NET installed on your computer. To use a
different compiler you may need to modify these steps and/or the makefile.</span></p>

<p class=NumStepIndent><span lang=EN-US>Open a command window, and go to the
examples</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>\dllclient</span><span
lang=EN-US> directory.</span></p>

<p class=NumStepIndent><span lang=EN-US>Execute the following command:</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>nmake</span></p>

<p class=NumStepIndent><span lang=EN-US>This will build the program, and create
the file dllclient.exe in the Corman Lisp root directory.</span></p>

<p class=NumStepIndent><span lang=EN-US>Run this program from the command line
by executing:</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>dllclient</span></p>

<p class=NumStepIndent><span lang=EN-US>This should run the command line
example program, which loads and runs the Corman Lisp kernel and image as part
of initializing the </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>dllsample</span><span lang=EN-US> DLL.</span></p>

<h2><a name="_Toc533948754"><span lang=EN-US>Multiple DLLs</span></a></h2>

<p class=NumStepIndent><span lang=EN-US>Multiple DLLs may be built using </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US>, and they may all be used at the same time by a client application
(within the same process). However, any DLLs which run in the same process must
share the same kernel and image file names, and be designed to share the same
image file. You cannot necessarily determine which DLL will load first, and
whichever one loads first will load the kernel and lisp image files that were
specified when it was compiled. Only one lisp image file may be loaded at a
time. </span></p>

<h2><a name="_Toc533948755"><span lang=EN-US>Limitations</span></a></h2>

<p class=NumStepIndent><span lang=EN-US>Up to 100 exported functions may be
defined in a DLL built using </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>COMPILE-DLL</span><span lang=EN-US>. Multiple DLLs
may be used to support &gt;100 functions.</span></p>

<p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='font-size:10.0pt'>&nbsp;</span></p>

<h2><a name="_Toc533948756"><span lang=EN-US>Technical Information</span></a></h2>

<p class=NumStepIndent><span lang=EN-US>The DLLs that are built using Corman
Lisp have initialization code which performs the following functions:</span></p>

<p class=bodytext style='margin-left:36.0pt;text-indent:-18.0pt'><span
lang=EN-US style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>It determines whether the Corman Lisp kernel is
loaded and active in the process. If not, it loads it using the name of the
kernel and lisp image file defined when the DLL was built with </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US>.</span></p>

<p class=bodytext style='margin-left:36.0pt;text-indent:-18.0pt'><span
lang=EN-US style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Once the kernel is loaded, the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>FASL</span><span
lang=EN-US> segment of the DLL is loaded by the kernel. This contains the
compiled code from the input lisp file when </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US> was executed. All the functions and data from that file are loaded
into the lisp image.</span></p>

<p class=bodytext style='margin-left:36.0pt;text-indent:-18.0pt'><span
lang=EN-US style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>The calling thread is initialized as a valid
lisp thread, using the </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>DirectCall</span><span lang=EN-US> function </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>BlessThread()</span><span
lang=EN-US>.</span></p>

<p class=bodytext style='margin-left:36.0pt;text-indent:-18.0pt'><span
lang=EN-US style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Foreign entry points to all the exported
functions are initialized, allowing subsequent client direct calls to the
exported lisp functions.</span></p>

<p class=NumStepIndent><span lang=EN-US>DLLs which are built from unlicensed
(evaluation) versions of Corman Lisp contain code that will execute
occasionally when a DLL is loaded. This code displays a modal dialog informing
the person running the client application that a DLL was created with an
evaluation version of Corman Lisp, and it is not intended for distribution.</span></p>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948757"><span lang=EN-US>19 
DirectCall Interface</span></a></h1>

<p class=NumStepIndent><span lang=EN-US>Corman Lisp may be embedded in another
application, and functions defined in lisp may be exported and called directly
via another application. This is most-easily accomplished via </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US>, which allows a Windows-standard DLL to be produced and linked to a
client application. However, for more flexible and creative use of Corman Lisp
within an application, the DirectCall interface may be used. The DirectCall
interface is used internally by any DLL created using the Corman Lisp </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>COMPILE-DLL</span><span
lang=EN-US> command.</span></p>

<p class=NumStepIndent><span lang=EN-US>The DirectCall interface consists of
several functions that are exported by the Corman Lisp kernel DLL </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLispServer.dll</span><span
lang=EN-US>. These are easily callable from C, C++ or other languages.</span></p>

<h2><a name="_Toc533948758"><span lang=EN-US>C/C++ API</span></a></h2>

<h3><a name="_Toc533948759"><span lang=EN-US>Initialize</span></a></h3>

<p class=Indentprogramsourcenormal><span lang=EN-US>extern &quot;C&quot; long
Initialize(</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>const wchar_t* imageName,      </span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>int clientType,           </span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>HINSTANCE appInstance,</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>HANDLE* thread, </span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span
lang=EN-US>HWND mainWindow, </span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:6.0pt'><span
lang=EN-US>    </span><span lang=EN-US>TextOutputFuncType textOutputFunc);</span></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr>
  <td width=108 valign=top style='width:81.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>imageName </span></p>
  </td>
  <td width=428 valign=top style='width:320.9pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>The wide
  character file name (0-terminated) of the lisp image to load</span></p>
  </td>
 </tr>
 <tr>
  <td width=108 valign=top style='width:81.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>clientType</span></p>
  </td>
  <td width=428 valign=top style='width:320.9pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>0 = Windows
  application, 1 = console app, 2 = IDE</span></p>
  </td>
 </tr>
 <tr>
  <td width=108 valign=top style='width:81.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>appInstance</span></p>
  </td>
  <td width=428 valign=top style='width:320.9pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=programsourcenormal><span lang=EN-US>HINSTANCE </span><span
  lang=EN-US style='font-family:"Garamond",serif'>supplied to the application
  at startup, or to the DLL at load time</span></p>
  </td>
 </tr>
 <tr>
  <td width=108 valign=top style='width:81.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>thread</span></p>
  </td>
  <td width=428 valign=top style='width:320.9pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>Current thread
  handle. This should be a real handle, not the value returned by </span><span
  lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>GetCurrentThread()</span><span
  lang=EN-US style='font-size:11.0pt'> (which is a pseudo-handle). You can use </span><span
  lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>DuplicateHandle</span><span
  lang=EN-US style='font-size:11.0pt'> to obtain a real handle from the
  pseudo-handle returned by </span><span lang=EN-US style='font-size:10.0pt;
  font-family:"Courier New"'>GetCurrentThread()</span><span lang=EN-US
  style='font-size:11.0pt'> if necessary.</span></p>
  </td>
 </tr>
 <tr>
  <td width=108 valign=top style='width:81.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>mainWindow</span></p>
  </td>
  <td width=428 valign=top style='width:320.9pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>The process main
  window handle. You may pass 0 (</span><span lang=EN-US style='font-size:11.0pt;
  font-family:"Courier New"'>NULL</span><span lang=EN-US style='font-size:11.0pt'>)
  if unknown.</span></p>
  </td>
 </tr>
 <tr>
  <td width=108 valign=top style='width:81.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>textOutputFunc</span></p>
  </td>
  <td width=428 valign=top style='width:320.9pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt'>A function that
  can output text (generally, text written to </span><span lang=EN-US
  style='font-size:9.0pt;font-family:"Courier New";letter-spacing:-1.0pt'>*terminal-io*</span><span
  lang=EN-US style='font-size:11.0pt;letter-spacing:-1.0pt'>).</span><span
  lang=EN-US style='font-size:11.0pt'> The function should be defined like
  this:</span></p>
  <p class=programsourcenormal style='text-align:justify'><span lang=EN-US
  style='font-size:10.0pt'>void OutputText(wchar_t* text, long numBytes);</span></p>
  </td>
 </tr>
</table>

<p class=bodytext><span lang=EN-US style='font-size:11.0pt'>&nbsp;</span></p>

<h3><a name="_Toc533948760"><span lang=EN-US>BlessThread</span></a></h3>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span
lang=EN-US>extern &quot;C&quot; void BlessThread();</span></p>

<p class=NumStepIndent><span lang=EN-US>Causes the current thread (the thread
calling this function) to be initialized as a lisp thread, to enable it to call
lisp functions directly. This is necessary so the garbage collector knows what
areas of the stack to scan during collection.</span></p>

<h3><a name="_Toc533948761"><span lang=EN-US>UnblessThread</span></a></h3>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span
lang=EN-US>extern &quot;C&quot; void UnblessThread();</span></p>

<p class=NumStepIndent><span lang=EN-US>This is the inverse operation to </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>BlessThread()</span><span
lang=EN-US>, and should be called when a thread is finished calling lisp
functions. </span></p>

<h3><a name="_Toc533948762"><span lang=EN-US>GetCallbackFunctionPointer</span></a></h3>

<p class=Indentprogramsourcenormal><span lang=EN-US>extern &quot;C&quot; void*
GetCallbackFunctionPointer(</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>    </span><span lang=FR>wchar_t*
functionName, </span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span lang=FR>   
</span><span lang=FR>wchar_t* package);</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>GetCallbackFunctionPointer()</span><span lang=EN-US> is used to
retrieve a pointer to a C function which is the exported entry to a lisp
function. </span></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:23.15pt;border-collapse:collapse'>
 <tr>
  <td width=144 valign=top style='width:108.05pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText><span lang=EN-US>functionName</span></p>
  </td>
  <td width=368 valign=top style='width:275.85pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText><span lang=EN-US>Wide character string (0-terminated) of
  lisp callback function. This should have been defined in the current lisp
  image using </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFUN-DIRECT-CALLBACK</span><span
  lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
  "Courier New"'>DEFUN-DIRECT-C-CALLBACK</span><span lang=EN-US>. </span></p>
  </td>
 </tr>
 <tr>
  <td width=144 valign=top style='width:108.05pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText><span lang=EN-US>package</span></p>
  </td>
  <td width=368 valign=top style='width:275.85pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText><span lang=EN-US>Wide character string (0-terminated) of
  the package name in which the specified direct callback function name
  resides.</span></p>
  </td>
 </tr>
</table>

<h2 style='margin-top:9.0pt'><span lang=EN-US>&nbsp;</span></h2>

<h2 style='margin-top:9.0pt;page-break-before:always'><a name="_Toc533948763"><span
lang=EN-US>Lisp API</span></a></h2>

<h3><a name="_Toc533948764"><span lang=EN-US>DEFUN-DIRECT-CALLBACK</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFUN-DIRECT-CALLBACK</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:9.0pt;font-family:"Courier New";font-weight:normal'>name
arglist &amp;rest body</span></i><i><span lang=EN-US style='font-weight:normal'>                       [macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package:</span><span lang=EN-US
style='font-size:9.0pt;font-family:"Courier New"'> </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>name</span></i><i><span lang=EN-US style='font-size:11.0pt;
font-family:Monaco'> </span></i><span lang=EN-US>is a symbol.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>arglist</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:Monaco'> </span><span lang=EN-US>is a list of the form:</span></p>

<p class=Indentprogramsourcenormal><i><span lang=EN-US>   </span></i><i><span
lang=EN-US>      </span></i><span lang=EN-US>((arg1-name  arg1-c-type)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US>     </span><span
lang=EN-US>     (arg2-name  arg2-c-type)</span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:3.0pt'><span
lang=EN-US>          etc.)</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro defines a callback function
which may be called from a client application via the DirectCall API. The
function that is created has :pascal (__stdcall) linkage, which is the usual
style for operating system callbacks in Windows. In other words, the callback
function will remove its own parameters from the call stack.</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro is similar in form and
function to the </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>CT:DEFUN_CALLBACK</span><span lang=EN-US style='font-size:11.0pt'>
</span><span lang=EN-US>macro.</span></p>

<h3><a name="_Toc533948765"><span lang=EN-US>DEFUN-DIRECT-C-CALLBACK</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEFUN-DIRECT-C-CALLBACK</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:9.0pt;font-family:"Courier New";font-weight:normal'>name
arglist &amp;rest body</span></i><i><span lang=EN-US style='font-weight:normal'>                  [macro]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>C-TYPES</span></p>

<p class=NumStepIndent><span lang=EN-US>This macro is like </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>DEFUN-DIRECT-CALLBACK</span><span
lang=EN-US>, except that the defined callback function has :c linkage, i.e. the
caller is expecting to remove the passed parameters from the stack.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948766"><span lang=EN-US>20 
Threads</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>The Corman Lisp kernel has been designed
to accommodate multiple threads of execution. Normally, when running Corman
Lisp, at least two threads are executing in the current process. The first is
the thread spawned by the application when it started. If you are running the
Corman Lisp IDE, this will be the main user interface thread for the editor. If
Corman Lisp was started by a different application, such as the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CLConsole.exe</span><span
lang=EN-US>, the console is running in this first thread. The second thread is
known as the Lisp primary thread. It is the primary thread of execution of the
Corman Lisp kernel. This thread is started when Corman Lisp is started, and
only exits when Corman Lisp completely shuts down. While Corman Lisp is
executing, other threads Lisp threads may be started. These each have their own
stack.</span></p>

<p class=MsoBodyText><span lang=EN-US>The functions which support multiple
threads are defined in the </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>THREADS</span><span lang=EN-US> package, which has
the nickname </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>TH</span><span
lang=EN-US>.</span></p>

<h2><a name="_Toc533948767"><span lang=EN-US>Special Variables and Threads</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>Because much of Common Lisp behavior is
controlled by the binding of special variables at run time, each Lisp thread
has its own special variable bindings. Corman Lisp has been designed such that
the outermost special variable binding is shared between all Lisp threads, but
when any special variables are rebound during execution, these new bindings may
only be seen by functions executing in the thread which created the binding. </span></p>

<p class=MsoBodyText><i><span lang=EN-US>Example:</span></i></p>

<p class=programsourcenormal><span lang=EN-US>(defun foo () (let ((*print-base*
9)) (print 100)))</span></p>

<p class=programsourcenormal style='margin-bottom:6.0pt'><span lang=EN-US>(th:create-thread
#’foo)</span></p>

<p class=MsoBodyText><span lang=EN-US>In this example, a thread is created,
which runs the function </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>FOO</span><span lang=EN-US>. When it begins
executing, it shares the binding of </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>*print-base*</span><span lang=EN-US> with the
primary thread. Once it rebinds the variable, however, that binding is only
seen by functions executing in the new thread, not by functions executing in
the primary thread. This is important because in this case it would interrupt
any printing which was being done in the primary thread.</span></p>

<p class=MsoBodyText style='page-break-before:always'><span lang=EN-US>Although
the Corman Lisp kernel supports multiple threads, many of the Corman Lisp
library functions (including Common Lisp library function implementations) are
not fully thread safe. You may use multiple threads for experimentation but be
aware that you may run into problems at this time. This will be remedied in a
future release.</span></p>

<p class=MsoBodyText><b><span lang=EN-US>To use any function in the </span></b><b><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></b><b><span
lang=EN-US> package, you must first execute the form:</span></b></p>

<p class=programsourcenormal><span lang=EN-US>(require ‘THREADS)</span></p>

<p class=programsourcenormal><span lang=EN-US>&nbsp;</span></p>

<h3><a name="_Toc533948768"><span lang=EN-US>CREATE-THREAD</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CREATE-THREAD</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>func
&amp;key (report-when-finished t)</span></i><i><span lang=EN-US
style='font-weight:normal'>      [function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>funcs</span></i><span lang=EN-US> should be a function to be
executed in the context of a newly created thread. </span></p>

<p class=NumStepIndent><span lang=EN-US>If </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>report-when-finished</span></i><i><span
lang=EN-US> </span></i><span lang=EN-US>is true, then a message is sent to the
Lisp Worksheet when the thread terminates. It will normally terminate when the
function that was called in the new thread terminates. It may terminate early
because of an unhandled error or exception.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns an integer representing the
thread ID of the newly created thread.</span></p>

<h3><a name="_Toc533948769"><span lang=EN-US>EXIT-THREAD</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>EXIT-THREAD</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>condition                             </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Causes the calling thread to exit. </span></p>

<h3><a name="_Toc533948770"><span lang=EN-US>THREAD-HANDLE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>THREAD-HANDLE</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>thread-id                           </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>HANDLE</span><span
lang=EN-US> associated with the passed thread id. The passed thread-id should
be the thread id of a currently allocated lisp thread.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948771"><span lang=EN-US>SUSPEND-THREAD</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>SUSPEND-THREAD</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>thread-id                          </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Suspends the lisp thread specified by
the passed thread id. </span></p>

<h3><a name="_Toc533948772"><span lang=EN-US>RESUME-THREAD</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>RESUME-THREAD</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>thread-id                           </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Resumes the lisp thread specified by
the passed thread id. </span></p>

<h3><a name="_Toc533948773"><span lang=EN-US>TERMINATE-THREAD</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>TERMINATE-THREAD</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>thread-id                       </span></i><i><span
lang=EN-US style='font-weight:normal'> [function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Terminates the lisp thread specified by
the passed thread id. This is a brute-force termination, and is usually not the
best way to end a thread. Better is to allow the thread to call </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>EXIT-THREAD</span><span
lang=EN-US> on its own.</span></p>

<h3><a name="_Toc533948774"><span lang=EN-US>*CURRENT-THREAD-ID*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>*CURRENT-THREAD-ID*</span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                              </span></i><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This variable is always bound to the
thread ID of the current thread.</span></p>

<h3><a name="_Toc533948775"><span lang=EN-US>*CURRENT-THREAD-HANDLE*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US>*</span><span lang=EN-US
style='font-family:"Courier New"'>CURRENT-THREAD-HANDLE*</span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                          </span></i><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This variable is always bound to the
thread handle of the current thread.</span></p>

<h3><a name="_Toc533948776"><span lang=EN-US>*CURRENT-PROCESS-ID*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>*CURRENT-PROCESS-ID*</span><span
lang=EN-US>                                                                </span><span
lang=EN-US style='font-weight:normal'> [<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This variable is always bound to the
process ID of the current process.</span></p>

<h3><a name="_Toc533948777"><span lang=EN-US>*CURRENT-PROCESS-HANDLE*</span></a></h3>

<p class=VariableTitle><span lang=EN-US style='font-family:"Courier New"'>*CURRENT-PROCESS-HANDLE*</span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                        </span></i><span
lang=EN-US> </span><span lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This variable is always bound to the
process handle of the current process.</span></p>

<h3><a name="_Toc533948778"><span lang=EN-US>CRITICAL-SECTION</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CRITICAL-SECTION</span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>                                   </span></i><span
lang=EN-US style='font-weight:normal'>[<i>class</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Critical sections are CLOS classes
which encapsulate a Win32 </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>CRITICAL_SECTION</span><span lang=EN-US> object.
These can be used for thread synchronization. Consult a Win32 reference for
details.</span></p>

<p class=NumStepIndent><span lang=EN-US>The two generic methods implemented for
</span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CRITICAL-SECTION</span><span
lang=EN-US> instances are </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>ENTER</span><span lang=EN-US> and </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>LEAVE</span><span
lang=EN-US>. The accessor for the critical section itself is </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CS</span><span
lang=EN-US>.</span></p>

<h3><a name="_Toc533948779"><span lang=EN-US>ALLOCATE-CRITICAL-SECTION</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>ALLOCATE-CRITICAL-SECTION</span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>                       </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Low-level function to allocate a Win32 </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CRITICAL_SECTION</span><span
lang=EN-US> object. Note that these should be deallocated when you are finished
with them. However, if you don’t deallocate them the garbage collector will
eventually do this via a finalization function.</span></p>

<h3><a name="_Toc533948780"><span lang=EN-US>DEALLOCATE-CRITICAL-SECTION</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>DEALLOCATE-CRITICAL-SECTION</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>critical-section-handle  </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Low-level function to deallocate a
Win32 </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CRITICAL_SECTION</span><span
lang=EN-US> object. </span></p>

<p class=NumStepIndent><span lang=EN-US>&nbsp;</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948781"><span lang=EN-US>ENTER-CRITICAL-SECTION</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>ENTER-CRITICAL-SECTION</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>critical-section-handle    </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Low-level function to enter a protected
code section using a Win32 </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>CRITICAL_SECTION</span><span lang=EN-US> object. 
Note that you <b>must</b> call LEAVE-CRITICAL-SECTION for every call to
ENTER-CRITICAL-SECTION. Because this is so important it is recommended you use
UNWIND-PROTECT or the convenient WITH-SYNCHRONIZATION macro (defined below).</span></p>

<h3><a name="_Toc533948782"><span lang=EN-US>LEAVE-CRITICAL-SECTION</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>LEAVE-CRITICAL-SECTION</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>critical-section-handle    </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Low-level function to leave a protected
code section using a Win32 </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>CRITICAL_SECTION</span><span lang=EN-US> object. </span></p>

<h3><a name="_Toc533948783"><span lang=EN-US>WITH-SYNCHRONIZATION</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>WITH-SYNCHRONIZATION</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>critical-section-handle . body  </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>THREADS</span></p>

<p class=NumStepIndent><span lang=EN-US>Example:</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>(with-synchronization (package-sync package)</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>        </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>(#| do stuff to package |#))</span></p>

<p class=NumStepIndent><span lang=EN-US>Using this macro automatically calls </span><span
lang=EN-US style='font-family:"Courier New"'>ENTER-CRITICAL-SECTION</span><span
lang=EN-US> before body, and ensures that </span><span lang=EN-US
style='font-family:"Courier New"'>LEAVE-CRITICAL-SECTION</span><span
lang=EN-US> is called when the body finishes. If a non-local exit happens the
critical section is still properly exited.</span></p>

<p class=NumStepIndent><span lang=EN-US>&nbsp;</span></p>

<p class=NumStepIndent><span lang=EN-US>&nbsp;</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948784"><span lang=EN-US>21</span></a><span
lang=EN-US style='font-weight:normal'>  </span><span lang=EN-US>Lisp Data
Structures</span></h1>

<p class=MsoBodyText><span lang=EN-US>In Corman Lisp, all Lisp objects are
tagged with information which allows their types to be determined at run time.
Small datatypes, specifically those which fit in 29 bits or less, are stored as
immediate values, with a type tag in the low order three bits. These include
fixnums (integers in the range –268435455 to 268435455) and characters.</span></p>

<p class=MsoBodyText><span lang=EN-US>All other Lisp objects are stored on the
heap, and are internally represented by a tagged pointer to a heap object. The
low order three bits of this pointer are used to determine the type of data
that is represented.</span></p>

<p class=MsoBodyText><span lang=EN-US>There are two types of heap objects,
conses (two cells, with no header) and uvectors. These objects are interspersed
on the heap. Uvectors have a block header in the first cell (with a tag of 110
in the lower three bits to indicate a special heap block header) which is
followed by an odd number of cells (to make the total block an even number of
cells). Thus, all heap blocks are a multiple of 8 bytes in size. Because of
this, the lower 3 bits of any pointer to a heap block would normally be 000,
and the type tag can be stored in these bits. For cons cells, the type tag is
100, and for uvectors it is 101.</span></p>

<p class=MsoBodyText><span lang=EN-US>There are some primitive functions which
can be used to access any type of Lisp heap object in a very efficient manner.
These are all inlined by the compiler automatically. These are dangerous
functions to use, and are only documented here for informational purposes or to
use at your own risk. You should know what you are doing if you use them. They
are used throughout the Corman Lisp source code.</span></p>

<h2><a name="_Toc533948785"><span lang=EN-US>Lisp Object Functions</span></a></h2>

<h3><a name="_Toc533948786"><span lang=EN-US>UREF</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>UREF</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>uvector
fixnum</span></i><i><span lang=EN-US style='font-weight:normal'>                                                                      
[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-family:"Courier New"'>uvector</span></i><i><span
lang=EN-US> </span></i><span lang=EN-US> is any Lisp heap object other than a
cons cell.</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-family:"Courier New"'>fixnum
</span></i><span lang=EN-US>is an integer in the range 1 .. size of uvector.</span></p>

<p class=NumStepIndent style='page-break-before:always'><span lang=EN-US>Returns
the contents of the requested cell, with 0 being the header cell. However, you
should not access the header cell directly, as the contents of that slot are
not a valid Lisp object. The special tag used for block headers is not a legal
object, and will cause most functions to misbehave if they see one. The fact
that it is not a legal Lisp object is useful for scanning the heap, and for
other internal uses. All other cells either contain a valid Lisp object, or
contain the special value </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>UNINITIALIZED</span><span lang=EN-US>. This value is
also dangerous. It is best to use </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>UNINITIALIZED-OBJECT-P</span><span
lang=EN-US> to test the contents of a slot before accessing it. Because </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>UREF</span><span
lang=EN-US> is a low level primitive, little type checking is done when you use
it.</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>SETF</span><span lang=EN-US> may be used with </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>UREF</span><span
lang=EN-US> to store the contents of a slot.</span></p>

<h3><a name="_Toc533948787"><span lang=EN-US>UVECTORP</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>UVECTORP</span><span
lang=EN-US style='font-weight:normal'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>object</span></i><i><span
lang=EN-US style='font-family:Courier;font-weight:normal'>                                </span></i><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>Package: CCL</span></p>

<p class=NumStepIndent><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>object</span></i><i><span lang=EN-US style='font-family:"Courier New"'>
</span></i><span lang=EN-US> is any Lisp object.</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns T if the passed object is a
uvector, </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>NIL</span><span
lang=EN-US> otherwise.</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948788"><span lang=EN-US>Type
Tags</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>The contents of all Lisp cells (which
include stack-allocated variables, heap objects and static objects) can be
divided into the following groups, based on their tags (low three bits).</span></p>

<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:-.25pt;border-collapse:collapse'>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:10.0pt;
  font-family:"Arial",sans-serif'>Tag</span></b></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:10.0pt;
  font-family:"Arial",sans-serif'>Type</span></b></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>000</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Fixnum
  (29-bit integer)</span></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>001</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Character,
  other small immediate objects</span></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>010</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Forwarding
  tag. Used by the garbage collector only.</span></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>011</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Immediate
  short float</span></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>100</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Cons
  reference</span></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>101</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Uvector
  reference</span></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>110</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Uvector
  header tag. Only found in the first cell of a uvector.</span></p>
  </td>
 </tr>
 <tr>
  <td width=67 valign=top style='width:50.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>111</span></p>
  </td>
  <td width=475 valign=top style='width:356.0pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>Immediate
  short float</span></p>
  </td>
 </tr>
</table>

<h2 style='margin-top:12.0pt'><a name="_Toc533948789"><span lang=EN-US>Immediate
Data Types</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>The following types are stored directly
in a cell.</span></p>

<h3><a name="_Toc533948790"></a><a name="__RefHeading___Toc420194258"><span
lang=EN-US>Fixnum</span></a><span lang=EN-US> </span></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Bits</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>31 30 29 28 27
  26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2 1 0</span></p>
  </td>
 </tr>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>29-bit signed
  fixnum</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 0</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948791"></a><a
name="__RefHeading___Toc420194259"><span lang=EN-US>Character</span></a><span
lang=EN-US> </span></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Bits</span></b></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>31 30 29 28
  27 26 25 24 </span></p>
  </td>
  <td width=258 valign=top style='width:193.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>23 22 21 20
  19 18 17 16 15 14 13 12 11 10 9 8</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>7 6 5 4 3</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2 1 0</span></p>
  </td>
 </tr>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
  <td width=258 valign=top style='width:193.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>16-bit
  character (normally ASCII)</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 0 0 0</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 1</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948792"></a><a
name="__RefHeading___Toc420194260"><span lang=EN-US>Short Float</span></a><span
lang=EN-US> </span></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Bits</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>31 30 29 28
  27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2</span></p>
  </td>
  <td width=31 valign=top style='width:23.25pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0</span></p>
  </td>
 </tr>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>30-bit short
  float</span></p>
  </td>
  <td width=31 valign=top style='width:23.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1</span></p>
  </td>
 </tr>
</table>

<h2 style='page-break-before:always'><a name="_Toc533948793"><span lang=EN-US>Heap
Object References</span></a></h2>

<p class=bodytext><span lang=EN-US>The following types are stored as a
reference to a heap object. For a cons cell, the reference has this format:</span></p>

<h3><a name="_Toc533948794"></a><a name="__RefHeading___Toc420194262"><span
lang=EN-US>Cons Reference</span></a><span lang=EN-US> </span></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Bits</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>31 30 29 28
  27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2 1 0</span></p>
  </td>
 </tr>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Upper 29 bits
  of a 32-bit pointer to a cons heap object</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 0</span></p>
  </td>
 </tr>
</table>

<p class=MsoBodyText style='margin-top:12.0pt'><span lang=EN-US>For all other
heap objects, the reference is in this format: </span></p>

<h3><a name="_Toc533948795"></a><a name="__RefHeading___Toc420194263"><span
lang=EN-US>Uvector Reference</span></a><span lang=EN-US> </span></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Bits</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>31 30 29 28
  27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2 1 0</span></p>
  </td>
 </tr>
 <tr>
  <td width=66 valign=top style='width:49.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
  <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Upper 29 bits
  of a 32-bit pointer to a uvector heap object</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 1</span></p>
  </td>
 </tr>
</table>

<p class=MsoNormal><b><span lang=EN-US style='font-size:24.0pt'>&nbsp;</span></b></p>

<h2 style='page-break-before:always'><a name="_Toc533948796"><span lang=EN-US>Extended
Data Types</span></a></h2>

<p class=MsoBodyText><span lang=EN-US>Here is the complete list of heap objects
supported in Corman Lisp.</span></p>

<p class=MsoBodyText><span lang=EN-US>Note that the block length is a 24-bit
integer representing the number of cells /2 which comprise the block. All cell
contents are tagged (in the lower 3 bits) unless otherwise noted.</span></p>

<h3><a name="_Toc533948797"><span lang=EN-US>Cons</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>0</span></p>
  </td>
  <td width=445 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>32-bit Lisp
  object</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>1</span></p>
  </td>
  <td width=445 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:10.0pt'>32-bit Lisp
  object</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948798"><span lang=EN-US>Lisp
Function (closure)</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 2</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 0 0 0</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Environment </span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Compiled-code
  block</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948799"><span lang=EN-US>Kernel
Function</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 2</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 0 0 1</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Environment
  (NIL)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Pointer to
  foreign function (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948800"><span lang=EN-US>Structure</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length </span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 0 1 0</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Structure
  definition vector</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Slot 1</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Slot 2</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<p class=MsoNormal><b><span lang=EN-US style='font-size:24.0pt'>&nbsp;</span></b></p>

<h3 style='margin-top:12.0pt'><a name="_Toc533948801"><span lang=EN-US>Array
(adjustable)</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length </span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 0 1 1</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector (simple,
  float, char, etc.)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Fill pointer</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Offset
  (displaced arrays)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Number of
  dimensions</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Dimension 0
  length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>6</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Dimension 1
  length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>7</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Dimension 2
  length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>8</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.  (only
  as many dimensions as are needed are allocated)</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948802"><span lang=EN-US>Symbol</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector length
  = 5</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 1 0 0</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Print value</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Value</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Package</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Property list</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Flags</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>6</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Function type</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>7</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Function</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>8</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Jump table
  entry (if non-zero)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>9</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Variable
  table entry (if non-zero)</span></p>
  </td>
 </tr>
</table>

<p class=MsoNormal><b><span lang=EN-US style='font-size:24.0pt'>&nbsp;</span></b></p>

<h3 style='margin-top:12.0pt;page-break-before:always'><a name="_Toc533948803"><span
lang=EN-US>Stream</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 11</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 1 0 1</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Name</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Underflow
  function</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Position</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Column</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Input buffer</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>6</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Input buffer
  length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>7</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Input buffer
  position</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>8</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Input buffer
  size</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>9</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>File handle
  or string</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>10</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Common Lisp
  subclass</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>11</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Binary
  (boolean)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>12</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Open
  (boolean)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>13</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Direction   (:input,
  :output, :bidirectional or :nil)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>14</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Interactive
  (boolean)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>15</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Element type</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>16</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Associated
  streams</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>17</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Overflow
  function</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>18</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Output buffer</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>19</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Output buffer
  length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>20</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Output buffer
  position</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>21</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Line number</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948804"><span lang=EN-US>Double
Float</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 2</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 1 1 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Float (upper
  32 bits, non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Float (lower
  32 bits, non-tagged)</span></p>
  </td>
 </tr>
</table>

<h3 style='page-break-before:always'><a name="_Toc533948805"><span lang=EN-US>Package</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 5</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 0 1 1 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Name</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Nicknames</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Use-packages</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Used-by
  packages</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Shadowing
  symbols</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>6</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Current
  capacity</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>7</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Number of
  symbols currently stored</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>8</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Table
  (capacity * 3 cells)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>9</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948806"><span lang=EN-US>Hash-table</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 3</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 0 0 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Current
  capacity</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Number of
  objects currently stored</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Test function</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector
  (capacity * 2 cells)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948807"><span lang=EN-US>Foreign
Pointer</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 1</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 0 0 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Foreign
  pointer (untagged)</span></p>
  </td>
 </tr>
</table>

<p class=MsoNormal><b><span lang=EN-US style='font-size:24.0pt'>&nbsp;</span></b></p>

<h3 style='page-break-before:always'><a name="_Toc533948808"><span lang=EN-US>Compiled-code
Block</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length </span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 0 1 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Magic number
  identifier: 0xDEADBEEF</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>References
  vector</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Properties
  list</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Code bytes 0
  - 3</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Code bytes 4
  - 7</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>6</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948809"><span lang=EN-US>Readtable</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 3 </span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 0 1 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Read level
  (integer)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Backquote
  processing (boolean)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Table (256 *
  2 cells)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Case</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948810"><span lang=EN-US>Complex
Number</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 2</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 1 0 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Real
  component</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Imaginary
  component</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948811"><span lang=EN-US>Ratio</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 2</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 1 0 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Numerator</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Denominator            </span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Unused</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948812"><span lang=EN-US>Bignum</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 1 1 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Number of
  32-bit cells * 2 + sign</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Cell 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Cell 1</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948813"><span lang=EN-US>Foreign
Heap Pointer</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 2</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0 1 1 1 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Foreign heap
  ptr (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Tagged size
  of heap block (in bytes)             </span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>System tag
  (normally = 0)</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948814"><span lang=EN-US>Weak
Pointer</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector length
  = 1</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 0 0 0</span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Weak
  reference to heap object</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948815"><span lang=EN-US>Simple
Vector</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 0 0 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Cell 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Cell 1</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='page-break-before:always'><a name="_Toc533948816"><span lang=EN-US>Simple
Character Vector</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 0 1 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Chars 0 – 1
  (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Chars 2 – 3 
  (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948817"><span lang=EN-US>Simple
Byte Vector</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 0 1 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Bytes 0 – 3
  (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Bytes 4 – 7
  (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948818"><span lang=EN-US>Simple
Short Vector</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 1 0 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Shorts 0 – 1
  (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Shorts 2 – 3
  (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948819"><span lang=EN-US>Simple
Double Float Vector</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 1 0 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Float 0 (low
  32-bits) (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Float 0 (high
  32-bits) (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Float 1 (low
  32-bits) (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>5</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Float 1 (high
  32-bits) (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>6</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3><a name="_Toc533948820"><span lang=EN-US>Simple Bit Vector</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 1 1 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Bits 0 - 3
  (one per byte) (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Bits 4 - 7 (one
  per byte) (non-tagged)</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948821"><span lang=EN-US>Simple
Single Float Vector</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 0 1 1 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Vector length</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Single float
  0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Single float
  1</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>4</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Etc.</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948822"><span lang=EN-US>Single
Float</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 1</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0 0 0 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Single float</span></p>
  </td>
 </tr>
</table>

<h3 style='margin-top:12.0pt'><a name="_Toc533948823"><span lang=EN-US>CLOS
Instance</span></a></h3>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:5.4pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Cell</span></b></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><b><span lang=EN-US style='font-size:8.0pt;font-family:
  "Arial",sans-serif'>Contents</span></b></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>0</span></p>
  </td>
  <td width=348 valign=top style='width:261.0pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Uvector
  length = 2</span></p>
  </td>
  <td width=54 valign=top style='width:40.5pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0 0 1 </span></p>
  </td>
  <td width=43 valign=top style='width:32.25pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1 1 0</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>1</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Class</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>2</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Slots         </span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=36 valign=top style='width:27.0pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>3</span></p>
  </td>
  <td width=445 colspan=3 valign=top style='width:333.75pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext style='margin-top:3.0pt;margin-right:0cm;margin-bottom:
  3.0pt;margin-left:0cm'><span lang=EN-US style='font-size:8.0pt'>Signature</span></p>
  </td>
 </tr>
</table>

<h1 style='page-break-before:always'><a name="_Toc533948824"><span lang=EN-US>22 
Corman Lisp Extensions</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>Here are some non-standard functions and
variables which are included in Corman Lisp and which you may find useful.</span></p>

<h2><a name="_Toc533948825"><span lang=EN-US>Non-standard Functions and
Variables</span></a></h2>

<h3><a name="_Toc533948826"><span lang=EN-US>*TOP-LEVEL*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>*TOP-LEVEL*</span><span
lang=EN-US>                                                                                      </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>This should normally be bound to the
top-level read-eval-print loop.</span></p>

<h3><a name="_Toc533948827"><span lang=EN-US>SAVE-IMAGE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>SAVE-IMAGE</span><span
lang=EN-US> </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>pathname</span></i><span lang=EN-US>                                                                      </span><span
lang=EN-US style='font-weight:normal'> [<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>The </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-IMAGE</span><span
lang=EN-US> command (in the Corman Lisp package) is used to dump the Lisp heap
to a file for later reloading. Invoking this function causes all ephemeral
heaps to be flushed into the primary heap </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>(GC 3)</span><span
lang=EN-US> and then the entire heap is written to the file specified by the
passed path name. You must be careful how you use this function. It handles
Lisp objects very well, and is very fast. However, non-Lisp objects, such as
Windows resources (handles, etc.) will not be saved and restored properly
without specific intervention by code that you need to write.</span></p>

<p class=NumStepIndent><span lang=EN-US>Foreign heap objects will be properly
saved and restored, with the exception that they may load at a different
address later. If one foreign heap object has a pointer to another foreign heap
object (or back to itself) this could be a problem. Foreign function
definitions and callbacks, and COM interfaces (which allocate foreign heap
objects internally) are handled correctly.</span></p>

<p class=NumStepIndent><span lang=EN-US>If the </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>pathname</span></i><span
lang=EN-US> specifies a file with an extension </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>.EXE</span><span lang=EN-US>,
then the saved image is appended to the</span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'> .EXE </span><span
lang=EN-US>file as a </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>.lisp</span><span lang=EN-US> segment. Any contents
of the </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.EXE
</span><span lang=EN-US>file are preserved. Note that if a </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.lisp</span><span
lang=EN-US> segment already exists, another one will be created. This is
probably not what you want. In future versions, the existing </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.lisp</span><span
lang=EN-US> segment will be overwritten.</span></p>

<p class=NumStepIndent><span lang=EN-US>This function will create an image in
the <b><i>output directory</i></b> if absolute image pathname was not given <i>(See
Section 6, Subsection “User Specific Files and Directories” for details)</i>.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948828"></a><a
name="__RefHeading___Toc420194296"><span lang=EN-US>LOAD-IMAGE</span></a><span
lang=EN-US style='font-weight:normal'> </span></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>LOAD-IMAGE</span><span
lang=EN-US>  </span><i><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";font-weight:normal'>pathname</span></i><span lang=EN-US>                                                                     </span><i><span
lang=EN-US style='font-weight:normal'>[function]</span></i></p>

<p class=NumStepIndent><span lang=EN-US>This function (in the Corman Lisp
package) is passed the name of a file created with the </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>SAVE-IMAGE</span><span
lang=EN-US> function. The saved Lisp heap is restored. This is a very fast
operation, almost nothing needs to be done except read the file into memory.
This function is called internally when Corman Lisp starts executing. By
default the file </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>CormanLisp.img</span><span lang=EN-US> is loaded. However, it is
possible to specify a different image file as a command line parameter when
invoking </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp.exe</span><span
lang=EN-US> or </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>CLConsole.exe</span><span lang=EN-US>.</span></p>

<p class=NumStepIndent><span lang=EN-US>If the </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>pathname</span></i><span
lang=EN-US> specifies a file with an extension </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>.EXE</span><span lang=EN-US>,
then the loaded image is read from a </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>.lisp</span><span lang=EN-US> segment of the</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'> .EXE</span><span
lang=EN-US> file. Any other contents of the </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>.EXE </span><span
lang=EN-US>file are ignored. Note that if more than one </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>.lisp </span><span
lang=EN-US>segment exists in the file, only the first one will be read.</span></p>

<p class=NumStepIndent><span lang=EN-US>This function will will look for an
image in the <b><i>output directory</i></b> if absolute image pathname was not
given <i>(See Section 6, Subsection “User Specific Files and Directories” for
details) </i>or in the <b><i>installation directory </i></b>(as the last
resort).</span></p>

<h3><a name="_Toc533948829"><span lang=FR>LOAD-DEFAULT-IMAGE</span></a></h3>

<p class=FunctionTitle><span lang=FR style='font-size:11.0pt;font-family:"Courier New";
color:black'>LOAD-DEFAULT-IMAGE</span><i><span lang=FR style='font-size:11.0pt;
font-family:"Courier New"'>                                 </span></i><span
lang=FR style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=bodytext style='margin-left:18.0pt'><span lang=EN-US>This operator
takes no arguments, and loads the </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>CormanLisp.img</span><span lang=EN-US> heap
file in the root install directory.  The default Lisp heap is restored.</span></p>

<h3><a name="_Toc533948830"><span lang=EN-US>CURRENT-DIRECTORY</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-family:"Courier New"'>CURRENT-DIRECTORY</span><span
lang=EN-US>                                                                         </span><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>This function (in the Corman Lisp
package) returns the current directory.</span></p>

<h3><a name="_Toc533948831"><span lang=EN-US>SETF CURRENT-DIRECTORY</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>(SETF (CURRENT-DIRECTORY)</span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'> </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";font-weight:normal'>pathname)</span></i><i><span
lang=EN-US>                                   </span></i><span lang=EN-US
style='font-weight:normal'> [<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>This function (in the Corman Lisp
package) sets the current directory.</span></p>

<h3><a name="_Toc533948832"><span lang=EN-US>FUNCTION-ENVIRONMENT</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>FUNCTION-ENVIRONMENT </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";color:black;font-weight:normal'>function</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                      </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Returns the lexical environment of any
function. Because the Corman Lisp compiler optimizer automatically turns any
lexical variables it can into stack allocated variables, only actual captured
bindings will be contained in the returned environment i.e. only those lexical
variable bindings which persist after the function that created the closure has
exited.</span></p>

<p class=NumStepIndent style='page-break-before:always'><i><span lang=EN-US>Example:</span></i></p>

<p class=Indentprogramsourcenormal><span lang=EN-US style='font-size:10.0pt'>(let
((count 0))</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US style='font-size:10.0pt'>   (defun
get-count () count)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US style='font-size:10.0pt'>  
</span><span lang=EN-US style='font-size:10.0pt'>(defun set-count (x)(setf
count x)))</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US style='font-size:10.0pt'>&nbsp;</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US style='font-size:10.0pt'>(function-environment
#’get-count)</span></p>

<p class=Indentprogramsourcenormal><span lang=EN-US style='font-size:10.0pt'>&nbsp;</span></p>

<p class=Indentprogramsourcenormal style='margin-bottom:6.0pt'><span
lang=EN-US style='font-size:10.0pt'>#S( COMMON-LISP::ENVIRONMENT :SLOT1 (0)
:SLOT2 #&lt; Uninitialized &gt; )</span></p>

<p class=NumStepIndent><span lang=EN-US>You should not attempt to manipulate
the returned environment. However, if you really feel you need to, you may use:</span></p>

<p class=Indentprogramsourcenormal style='text-indent:18.0pt'><span lang=EN-US
style='font-size:10.0pt'>(UREF environment 2) -&gt; slot 1 binding</span></p>

<p class=Indentprogramsourcenormal style='text-indent:18.0pt'><span lang=EN-US
style='font-size:10.0pt'>(UREF environment 3) -&gt; slot 2 binding</span></p>

<p class=bodytext style='margin-left:36.0pt'><span lang=EN-US>etc</span><span
lang=EN-US style='font-size:10.0pt'>. </span></p>

<p class=NumStepIndent><span lang=EN-US>In each case, </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>UREF</span><span lang=EN-US>
returns the binding, which is a cons cell whose </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CAR</span><span lang=EN-US>
represents the current value of the binding.</span></p>

<h3><a name="_Toc533948833"><span lang=EN-US>*CORMANLISP-DIRECTORY*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*CORMANLISP-DIRECTORY*</span><span lang=EN-US>                                                                </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>At run time this variable is bound to
the directory the main application was launched from.</span></p>

<h3><a name="_Toc533948834"><span lang=EN-US>*CORMANLISP-SERVER-DIRECTORY*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*CORMANLISP-SERVER-DIRECTORY*</span><span
lang=EN-US>                                                 </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>At run time this variable is bound to
the directory that </span><span lang=EN-US style='font-size:10.0pt;font-family:
"Courier New"'>CormanLispServer.dll</span><span lang=EN-US> was launched from.</span></p>

<h3><a name="_Toc533948835"><span lang=EN-US>FIND-IN-FILES</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>FIND-IN-FILES </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";color:black;font-weight:normal'>string</span></i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:black'> </span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:black;
font-weight:normal'>path</span></i><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";color:black'> </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";color:black;font-weight:normal'>&amp;key</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:black'> (</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:black;
font-weight:normal'>ignore-case</span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New";color:black'> </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";color:black;font-weight:normal'>t</span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:black'>))</span><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>    </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Searches <i>path,</i> which may contain
wildcards, for the passed string.</span></p>

<p class=NumStepIndent><span lang=EN-US>Example:</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>(find-in-files &quot;corman&quot; &quot;sys/*lisp&quot;)</span></p>

<h3><a name="_Toc533948836"><span lang=EN-US>MACROEXPAND-ALL</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>MACROEXPAND-ALL </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";color:black;font-weight:normal'>expression</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                         </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Like MACROEXPAND, but recursively
descends the expression and expands all macros in the expression. This is the
same function used by the compiler whenever it compiles a function or
expression. It does not descend inside embedded LAMBDA expressions, however.</span></p>

<p class=NumStepIndent><span lang=EN-US>Example:</span></p>

<p class=NumStepIndent><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>(ccl:macroexpand-all '(defun foo (x) x))</span></p>

<h3><a name="_Toc533948837"><span lang=EN-US>LISP-SHUTDOWN</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>LISP-SHUTDOWN </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";color:black;font-weight:normal'>message</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                              </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This function shuts down the Lisp
application cleanly, which may be the Corman Lisp IDE, a console application,
or any other Corman Lisp hosting application (including any applications
created via </span><span class=programsourcenormalChar1><span lang=EN-US
style='font-size:11.0pt'>SAVE-APPLICATION</span></span><span lang=EN-US>). It
does this by both quitting Corman Lisp threads, and then instructing the
hosting application (via COM) to shut itself down. This is cleaner and more
reliable than calling </span><span class=programsourcenormalChar1><span
lang=EN-US style='font-size:11.0pt'>EXIT-PROCESS.</span></span></p>

<p class=NumStepIndent><span class=Char><span lang=EN-US>The passed message
argument should be a string which will be displayed to the user when the
process exits.</span></span></p>

<h3><a name="_Toc533948838"><span lang=EN-US>*USE-EXTERNAL-BROWSER*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*USE-EXTERNAL-BROWSER*</span><span lang=EN-US>                                                                </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Use default system WEB-browser for
documentation lookups.</span></p>

<p class=NumStepIndent><span lang=EN-US>&nbsp;</span></p>

<p class=NumStepIndent style='margin-left:0cm;page-break-before:always'><a
name="__RefHeading___Toc420194305"></a><span class=1Char><span lang=EN-US
style='font-size:24.0pt'>23 Auto-Update</span></span></p>

<p class=bodytext><span lang=EN-US>An auto-update feature, enabled by default
in the Corman Lisp IDE, will keep your Corman Lisp installation up to date with
patches, documentation updates, etc. Each time the IDE starts it will check the
Corman Lisp web site (</span><span lang=EN-US><a
href="http://www.cormanlisp.com/">www.cormanlisp.com</a></span><span
lang=EN-US>) for new patch files. The patch level of these files will be
compared against the patch level of your installed version, and if the patches
are newer, you will be prompted to upgrade to the newer patch level. If you
choose to upgrade, the new patches will be loaded and installed automatically,
and a new </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp.img</span><span
lang=EN-US> file will be generated. Previous files will be backed up, and may
be used later if for some reason you choose to roll back (undo) a patch.</span></p>

<p class=bodytext><span lang=EN-US>The Auto-Update facility may be used from
the Corman Lisp console as well, but does not run automatically (by default).
You may make changes in the </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>init.lisp</span><span lang=EN-US> file to either
disable Auto-Update in the IDE, or enable it in the console, as desired.</span></p>

<p class=bodytext><span lang=EN-US>While the basic feature is automatic, the
following functions exported by the </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>CormanLisp</span><span lang=EN-US> (CCL)
package may be useful to you.</span></p>

<h3><a name="_Toc533948839"><span lang=EN-US>*CORMANLISP-PATCH-LEVEL*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*CORMANLISP-PATCH-LEVEL*</span><span lang=EN-US>                                                            </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>At run time this variable is bound to
current patch level (an integer). Patch level 0 means no patches have been
applied to the release version.</span></p>

<h3><a name="_Toc533948840"><span lang=EN-US>AUTO-UPDATE</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>AUTO-UPDATE</span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>                                        </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>Invokes the Auto-Update feature.</span></p>

<h3><a name="_Toc533948841"><span lang=EN-US>PATCH-ROLLB ACK</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>PATCH-ROLLBACK </span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New";color:black;font-weight:normal'>level</span></i><i><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>                               </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>The argument should be an integer
between 0 and the current patch level. This function causes any patches newer
than the specified level to be rolled back (undone).</span></p>

<h3><a name="_Toc533948842"><span lang=EN-US>*AUTO-UPDATE-ENABLED*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*AUTO-UPDATE-ENABLED*</span><span lang=EN-US>                                                                   </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This is true by default. If you set it
to NIL, (in the</span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'> init.lisp</span><span lang=EN-US> file, for example), then the
Auto-Update feature is disabled.</span></p>

<h3><a name="_Toc533948843"><span lang=EN-US>*PATCH-ROOT-DIRECTORY*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*PATCH-ROOT-DIRECTORY*</span><span lang=EN-US>                                                                </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This variable is set to the directory
path on the </span><span lang=EN-US><a href="http://www.cormanlisp.com/">www.cormanlisp.com</a></span><span
lang=EN-US> server which contains patches. You should not need to set or change
this variable, and it is documented here for informative purposes only.</span></p>

<h3><a name="_Toc533948844"><span lang=EN-US>*PATCH-SERVER*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*PATCH-SERVER*</span><span lang=EN-US>                                                                                  </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This variable is set to the server </span><span
lang=EN-US><a href="http://www.cormanlisp.com/">www.cormanlisp.com</a></span><span
lang=EN-US>. You should not need to set or change this variable, and it is
documented here for informative purposes only.</span></p>

<h3><a name="_Toc533948845"><span lang=EN-US>*AUTO-UPDATE-LEVEL*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*AUTO-UPDATE-LEVEL*</span><span lang=EN-US>                                                                       </span><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=NumStepIndent><span lang=EN-US>This is used by the Auto-Update
facility to allow updates to the Auto-Update feature itself. (This was
necessary at one point during 3.0 development). You should not need to set or
change this variable, and it is documented here for informative purposes only.</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948846"><span lang=FR>COMPILE-CORMANLISP-IMAGE</span></a></h3>

<p class=FunctionTitle><span lang=FR style='font-size:11.0pt;font-family:"Courier New";
color:black'>COMPILE-CORMANLISP-IMAGE</span><i><span lang=FR style='font-size:
11.0pt;font-family:"Courier New"'>                           </span></i><span
lang=FR style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=bodytext style='margin-left:18.0pt'><span lang=EN-US>This operator
takes no arguments, and recompiles the </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp.img</span><span
lang=EN-US> file in the root install directory. Normally it is automatically
called by Auto-Update, but you may also call it explicitly if you have modified
the kernel or any files in the </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>SYS/</span><span lang=EN-US> directory. After
invoking it, a console process is started which executes the operation. When
the spawned console finishes, you should restart Corman Lisp (either the IDE or
the console app, depending which you are running) and you will now have the
updated </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp.img</span><span
lang=EN-US> file. </span></p>

<p class=bodytext style='page-break-before:always'><a
name="__RefHeading___Toc420194314"></a><span class=1Char><span lang=EN-US
style='font-size:24.0pt'>24 Memory Report</span></span></p>

<p class=MsoBodyText><span lang=EN-US>Corman Lisp contains a system dump
feature called MEMORY-REPORT which causes a dump file of all threads, stacks,
registers and heaps to be created. This can be useful for tracking down system
problems, FFI issues, threading issues, etc. which are beyond the capabilities
of the built-in Lisp debug facility. The dump file is created in the Corman
Lisp. The dump file is located in the Corman Lisp root install directory, and
is called </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp_dump.log</span><span
lang=EN-US>. When this function is invoked, any previous dump file is
automatically overwritten.</span></p>

<p class=MsoBodyText><span lang=EN-US>Various system errors will automatically
generate this dump file when a serious error is detected. In some cases the
system will attempt to continue execution from a known restart, such as the
TOP-LEVEL function. In other cases, such as when the system was in the process
of garbage collection when the error was detected, recovery is not possible and
the lisp system shuts itself down. If you are running in the IDE you may still
be able to continue to edit files and save open files, but Lisp code will not
execute.</span></p>

<p class=MsoBodyText><span lang=EN-US>When the memory report function is
called, a new thread is started (not a Lisp thread) and all Lisp threads are
halted. The new thread scans all Lisp threads and reports their register
contents as well as a dump of the stack of each thread. The stack dump attempts
to locate stack frame links and to determine which function was executing at
each level. This is not always possible and so you may not always be able to
rely on the function names being reported. Various annotations are placed next
to contents of the stack to enable diagnosing of problems.</span></p>

<p class=MsoBodyText><span lang=EN-US>Finally, the contents of all three Lisp heaps
(the two ephemeral heaps and the primary heap) are dumped. Each object on the
heap is either a CONS (2 cells, 8 bytes, with no header) or a UVECTOR—an
arbitrary number of cells with the first cell containing a uvector header (see
the chapter on Run-Time Architecture for details).</span></p>

<p class=MsoBodyText><span lang=EN-US>This dump file is usually quite large (20
megs to 40 megs is common). If you need to view it, make sure you use an
appropriate text editor which can handle large files. For example, don’t try to
use Microsoft Word. Notepad works OK. I like to use TextPad (</span><span
lang=EN-US><a href="http://www.textpad.com/">www.textpad.com</a></span><span
lang=EN-US>).</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948847"><span lang=EN-US>MEMORY-REPORT</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>MEMORY-REPORT</span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>                                      </span></i><span
lang=EN-US style='font-weight:normal'>[<i>function</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=bodytext style='margin-left:18.0pt'><span lang=EN-US>This function
takes no arguments, and creates the dump file </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CormanLisp_dump.log</span><span
lang=EN-US>. It will overwrite any existing file by that name.</span></p>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948848"><span lang=EN-US>25
Microsoft .NET Integration</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>Corman Lisp includes the RDNZL package
from Edi Weitz. This package enables Lisp code to call methods on .NET objects,
as well as read and set properties and perform other .NET actions. The syntax
is very nice and some sample applications are provided. </span></p>

<p class=MsoBodyText><span lang=EN-US>Dr. Weitz has been kind enough to allow
us to distribute the RDNZL package with Corman Lisp, while retaining the
following copyright on all files:</span></p>

<p class=MsoBodyText><i><span lang=EN-US style='font-size:10.0pt;font-family:
"Courier New"'>Copyright (c) 2004-2006, Dr. Edmund Weitz.  All rights reserved.</span></i></p>

<p class=MsoBodyText><span lang=EN-US>To enable .NET integration, use the
following command:</span></p>

<p class=programsourcenormal style='text-indent:36.0pt'><b><span lang=EN-US>(require
:RDNZL)</span></b></p>

<p class=programsourcenormal style='text-indent:36.0pt'><b><span lang=EN-US>&nbsp;</span></b></p>

<p class=programsourcenormal><span class=Char><span lang=EN-US
style='font-size:12.0pt'>This loads a file modules/rdnzl.lisp, which is
provided by Corman Lisp. This in turn invokes the RDNZL loader provided by the
release package of RDNZL. We have set this up so that you may upgrade to a
different version of RDNZL without having to change any of your source files.</span></span></p>

<p class=programsourcenormal><span lang=EN-US>&nbsp;</span></p>

<p class=programsourcenormal><span class=Char><span lang=EN-US
style='font-size:12.0pt'>The first time you load RDNZL, it will attempt to
compile all the files using COMPILE-FILE. This will take a few seconds. Each
time that you load RDNZL on subsequent sessions, the compiled FASL files will
be reloaded and the load should be much faster.</span></span></p>

<p class=programsourcenormal><span lang=EN-US>&nbsp;</span></p>

<h3><a name="_Toc533948849"><span lang=EN-US>*RDNZL-VERSION*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*RDNZL-VERSION*</span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>                                   </span></i><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=MsoBodyText style='margin-left:18.0pt'><span lang=EN-US>This variable
contains the currently installed (or preferred) version of RDNZL. If you wish
to update the RDNZL package, you should install it in the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>libraries/rdnzl/</span><span
lang=EN-US> path under the root Corman Lisp directory </span><span lang=EN-US>(</span><span
class=programsourcenormalChar1><span lang=EN-US style='font-size:11.0pt'>ccl:*cormanlisp-directory*</span></span><span
lang=EN-US style='color:black'>). You should then update the value of this
variable in the file </span><span class=programsourcenormalChar1><span
lang=EN-US style='font-size:11.0pt'>modules/rdnzl.lisp</span></span><span
lang=EN-US style='color:black'>.</span></p>

<p class=programsourcenormal><span lang=EN-US>&nbsp;</span></p>

<h3 style='page-break-before:always'><a name="_Toc533948850"><span lang=EN-US>*RDNZL-PATH*</span></a></h3>

<p class=FunctionTitle><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New";color:black'>*RDNZL-PATH*</span><i><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>                                      </span></i><span
lang=EN-US style='font-weight:normal'>[<i>variable</i>]</span></p>

<p class=NumStepIndent><span lang=EN-US>Package: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CCL</span></p>

<p class=programsourcenormal style='margin-left:18.0pt'><span class=Char><span
lang=EN-US style='font-size:12.0pt'>This variable contains the path to the
installed RDNZL package. It is set by the system, based on the version string</span></span><span
lang=EN-US style='font-size:10.0pt;color:black'> (*RDNZL-VERSION*).</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt;
color:black'>&nbsp;</span></p>

<p class=MsoBodyText style='margin-left:18.0pt'><span lang=EN-US>If you wish to
learn more about .NET integration via RDNZL, please see the file </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>doc/index.html</span><span
lang=EN-US> under the RDNZL package directory. Once you have loaded RDNZL, you
can view the help file in the Corman Lisp IDE with the following command:</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt;
color:black'>&nbsp;</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>(ccl:display-url
</span></p>

<p class=programsourcenormal style='text-indent:36.0pt'><span lang=EN-US
style='font-size:10.0pt'>(concatenate 'string ccl::*rdnzl-path* <i>&quot;doc/index.html&quot;</i>))</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>&nbsp;</span></p>

<p class=programsourcenormal style='margin-left:36.0pt'><span class=Char><span
lang=EN-US style='font-size:12.0pt'>This file will also be available from the <b>Help</b>
menu in the Corman Lisp IDE.</span></span></p>

<h1 style='page-break-before:always'><a name="_Toc533948851"><span lang=EN-US>26
Run-time Architecture</span></a></h1>

<p class=MsoBodyText><span lang=EN-US>This section is designed to give you
information that you need if you want to go below the surface of Corman Lisp,
such as writing assembly code, special code generators, or custom  interface
code.</span></p>

<p class=MsoBodyText><span lang=EN-US>Any code which is executed, whether
written in Lisp as part of the system or by a user, or kernel code written in
C, or assembler code, exists as machine code at the time it executes. The
Corman Lisp system, at run time, integrates code from all these sources with
code that you write. They all have to work harmoniously together, or things
would get ugly quickly.</span></p>

<p class=MsoBodyText><span lang=EN-US>Here are a few of the specific issues
that can be problems, and which any generated code needs to account for:</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>Lisp functions generally can take any number of
parameters, and return any number of values. Functions written in C tend to
take a fixed number of parameters, and return a single value. In assembler,
anything is possible.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>C functions like to have their parameters pushed
on the stack from right to left (last parameter first), but Common Lisp code
works better if parameters are pushed on the stack from left to right.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>All Lisp heap objects can move in memory at any
time, because of garbage collection. A memory address is not a good way to keep
track of a particular lisp object. It is particularly bad to have a pointer
which points into the middle of a lisp object. In C, on the other hand,
pointers into the middle of arrays and structures are common, and in fact
typically get generated by compilers.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>The presence of foreign code (either called by
Lisp code or calling Lisp code) violates many of Lisp’s run-time rules. To
handle this, a certain amount of run-time record-keeping must be maintained.</span></p>

<p class=BulletList><span lang=EN-US style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span lang=EN-US>The presence of multiple Lisp threads, possibly
running simultaneously on multiple processors, means that Lisp code must be
very careful not to allow two threads to deadlock or to simultaneously try to
write to the same heap object.</span></p>

<p class=MsoBodyText><span lang=EN-US>These are just a few of the issues that
make generating Lisp code a challenge. In short the main areas we need to
consider are: the lisp function runtime architecture, foreign code, garbage
collection, and multiple threads. </span></p>

<p class=MsoBodyText style='page-break-before:always'><span lang=EN-US>We will
start by looking at how a particular lisp function executes. To do this we need
to delve into Intel x86 assembler. This section assumes the reader knows a bit
about assembler. If not, you probably need to do a little research on your own
to fully understand this section.</span></p>

<p class=MsoBodyText><span lang=EN-US>An important concept to mention here is
tagging. All lisp objects are tagged with 2 or 3 bits of type information in
the low bits of the 32-bit word. For example, fixnums have the low three bits
000. When describing the runtime architecture, we need to distinguish when a
pointer or integer is tagged or untagged. Typically they are always tagged,
except in certain circumstances.</span></p>

<h2><a name="_Toc533948852"><span lang=EN-US>Register Usage Conventions</span></a></h2>

<p class=MsoBodyText style='margin-bottom:12.0pt'><span lang=EN-US>The
processor has the following 32-bit registers (we will ignore floating point
registers here):</span></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
 style='margin-left:-.25pt;border-collapse:collapse'>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>EIP</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border:solid black 1.0pt;
  border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Instruction Pointer</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Always contains the address of the
  instruction being executed (or about to be executed).</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>EBP</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Base Pointer</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Always contains the address of the current
  stack frame. Therefore it points into the stack of the currently executing
  thread. Negative offsets from </span><span lang=EN-US style='font-size:11.0pt;
  font-family:"Courier New"'>EBP</span><span lang=EN-US> are usually local
  variables, and positive offsets are passed parameters.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>ESI</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>QV Pointer</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Always contains the address of the current
  thread’s </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>QV</span><span
  lang=EN-US> vector. This is a vector containing kernel objects, jump table
  entries, and dynamic variable bindings. It is not part of the Lisp heap. </span><span
  lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>QV[0]</span><span
  lang=EN-US> is always the symbol </span><span lang=EN-US style='font-size:
  11.0pt;font-family:"Courier New"'>NIL</span><span lang=EN-US>, therefore  MOV
  eax, [esi]  moves </span><span lang=EN-US style='font-size:11.0pt;font-family:
  "Courier New"'>NIL</span><span lang=EN-US> into the </span><span lang=EN-US
  style='font-size:11.0pt;font-family:"Courier New"'>eax</span><span
  lang=EN-US> register.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>EDI</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Function Environment Pointer</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>On entry to a lisp function, this register
  contains the address of the function’s environment. This environment contains
  lexical bindings which were captured when the function was compiled. If there
  were no lexical bindings (from outer functions) which were captured at
  compile time, the environment is empty, and </span><span lang=EN-US
  style='font-size:11.0pt;font-family:"Courier New"'>EDI</span><span
  lang=EN-US> will point to </span><span lang=EN-US style='font-size:11.0pt;
  font-family:"Courier New"'>NIL</span><span lang=EN-US>.</span></p>
  <p class=bodytext><span lang=EN-US>During execution of the function, </span><span
  lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>EDI</span><span
  lang=EN-US> may be reused for other purposes.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>EAX</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Function Return</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>EAX</span><span
  lang=EN-US> is a general purpose register, used for many temporary
  calculations. It is specifically used to return a value from a function. If a
  function returns a single value, </span><span lang=EN-US style='font-size:
  11.0pt;font-family:"Courier New"'>EAX</span><span lang=EN-US> always holds
  that value. If the function returns more than one value, </span><span
  lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>EAX</span><span
  lang=EN-US> holds the first value, and all the values are kept in a list at
  address {ESI + 8]. If no values are returned, </span><span lang=EN-US
  style='font-size:11.0pt;font-family:"Courier New"'>EAX</span><span
  lang=EN-US> will contain </span><span lang=EN-US style='font-size:11.0pt;
  font-family:"Courier New"'>NIL</span><span lang=EN-US>.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>EBX</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Parameter Block</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>On entry to any function which takes an
  arbitrary number of parameters, </span><span lang=EN-US style='font-size:
  11.0pt;font-family:"Courier New"'>EBX</span><span lang=EN-US> is computed and
  initialized to point to the first (leftmost) parameter. Note that this is not
  at a fixed offset from the base pointer (</span><span lang=EN-US
  style='font-size:11.0pt;font-family:"Courier New"'>EBP</span><span
  lang=EN-US>) but has to be computed based on the number of parameters
  actually passed. If a function takes a fixed number of parameters, or when </span><span
  lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>EBX</span><span
  lang=EN-US> is no longer needed, </span><span lang=EN-US style='font-size:
  11.0pt;font-family:"Courier New"'>EBX</span><span lang=EN-US> is used as a
  general purpose register. </span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>ECX</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>Parameter/<br>
  Return Value count</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>On entry to any lisp function, </span><span
  lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>ECX</span><span
  lang=EN-US> contains the untagged number of parameters passed to the
  function. When a function returns, </span><span lang=EN-US style='font-size:
  11.0pt;font-family:"Courier New"'>ECX</span><span lang=EN-US> contains the
  untagged number of values being returned. When not calling or returning from
  a function, </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>ECX</span><span
  lang=EN-US> is a general purpose register.</span></p>
  </td>
 </tr>
 <tr style='page-break-inside:avoid'>
  <td width=79 valign=top style='width:59.4pt;border-top:none;border-left:solid black 1.0pt;
  border-bottom:solid black 1.0pt;border-right:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>EDX</span></p>
  </td>
  <td width=114 valign=top style='width:85.5pt;border-top:none;border-left:
  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>General Purpose</span></p>
  </td>
  <td width=349 valign=top style='width:261.5pt;border:solid black 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=bodytext><span lang=EN-US>This register has no special usage, and is
  generally used, along with </span><span lang=EN-US style='font-size:11.0pt;
  font-family:"Courier New"'>EAX</span><span lang=EN-US>, for temporary
  calculations.</span></p>
  </td>
 </tr>
</table>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

<h2 style='page-break-before:always'><a name="_Toc533948853"><span lang=EN-US>Tagging</span></a></h2>

<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>

<p class=bodytext><span lang=EN-US>We noted that lisp data is tagged in the low
bits with some type information. The details of tag bits are discussed in a
previous section of this document (see <i>Lisp Data Structures</i>). We need to
expand on the notion of tagging a bit more here, to fully explain its purpose
and when untagged values are allowed.</span></p>

<p class=bodytext><span lang=EN-US>The primary purpose for tagging is to allow
the garbage collector to distinguish between pointers to heap objects, which it
needs to be able to relocate, and arbitrary data like numbers or characters.
When the garbage collector moves an object, it must update the pointer in
memory to point to the new address. It is essential that it always can
correctly distinguish between heap pointers and data. If it mistook an integer
for a heap address, it could corrupt the heap (by moving only part of a block
of data) as well as corrupt the integer (by changing it into a pointer to the
new heap address).</span></p>

<p class=bodytext><span lang=EN-US>Heap allocations happen all the time during
lisp code execution. It is nearly impossible to prevent them, and they are fast
enough you shouldn’t need to (on par with stack frame allocation). But since
any heap allocation can trigger garbage collection, and this can even happen
from another lisp thread, we need to keep all lisp data tagged at all times.
This includes not only all data in the heap, but also all data on the stack and
in registers.</span></p>

<p class=bodytext><span lang=EN-US>Having said that, we will more precisely
specify what it means to be <i>safe</i>. We will say data is safe, in relation
to memory management, if it is either tagged or by some other means will not be
mistaken for the wrong type by the garbage collector. By the most convenient
definition, we will say something is safe if it is data (not a pointer) and
cannot be mistaken for a pointer, or if it is a pointer and cannot be mistaken
for data. Thus we will consider, for this discussion, that the number of passed
parameters to a function is correctly tagged, even though it does not contain
000 in its low three bits (it is an untagged integer). This is OK because the
number of parameters cannot exceed 65536, and all heap addresses are guaranteed
to be above 65536. This bit pattern will never confuse the garbage collector.
In general, bit patterns below 65536 are always safe, and need not be tagged.
Note that they must be stored in a full 32-bit register, however. If we were to
store one of these values in the low 16-bits of a register, and another small
integer in the upper 16-bits, we could inadvertently create what looks like a
heap address.</span></p>

<p class=bodytext style='page-break-before:always'><span lang=EN-US>The garbage
collector assumes something is a pointer if it points into the range of the
heap i.e. it contains an address which is within the bounds of some section of
the heap, and if it contains a tag of 100 or 101 in the lower 3 bits of the
address. These represent </span><span lang=EN-US style='font-size:11.0pt;
font-family:"Courier New"'>CONS</span><span lang=EN-US> and </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>UVECTOR</span><span
lang=EN-US> heap objects, respectively. A </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>CONS</span><span lang=EN-US>
is an 8-byte heap object, with no header, and a </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>UVECTOR</span><span
lang=EN-US> is an arbitrary-sized heap object with a 4-byte header. All </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>UVECTORs</span><span
lang=EN-US> are multiples of 8 bytes in size, which means all heap objects
begin on 8-byte boundaries.</span></p>

<p class=bodytext><span lang=EN-US>Any bit pattern in a register which contains
other than 100 or 101 in its low three bits, or does not point within an area
of the lisp heap, is assumed by the garbage collector to be data. With a single
exception:</span></p>

<p class=bodytext><span lang=EN-US>In x86 assembly language, code instructions
vary from 1-15+ bytes, and are byte-aligned, meaning no special alignment. The
EIP register is always known to contain a pointer to code, and the garbage
collector determines whether this is a pointer to a lisp code block (which is a
lisp heap block) simply by looking at its address and seeing if it is within a
heap section. The logic to handle this pointer is a little trickier, because it
points into the middle of a heap block rather than the beginning. Also, a
return address is stored on the stack along with every stack frame, and these
return addresses are like the EIP contents in terms of how they need to be
handled. The garbage collector must be able to precisely identify all the
return addresses on the stack, and move the code they point to and update them
correctly.</span></p>

<p class=bodytext><span lang=EN-US>Some lisp heap objects may contain binary
data which is not tagged. These objects include single-floats, bignums, byte
arrays, strings, bit arrays, etc. In all cases these are stored in uvectors. In
the uvector header, 5 bits are used to indicate the uvector type (which
includes all the types just mentioned). The garbage collector, as it scans the
heap, uses this type information to determine which bits to skip during
collection. This prevents it from mistaking arbitrary bit patterns for heap
pointers.</span></p>

<h3><a name="_Toc533948854"><span lang=EN-US>Atomic Operations</span></a></h3>

<p class=bodytext><span lang=EN-US>Sometimes it is necessary for executing code
to temporarily hold a bit pattern in a register which is unsafe i.e. could be
mistaken for the wrong type by the garbage collector. Since the collector can
normally run between any arbitrary pair of instructions, there needs to be a mechanism
to prevent the collector from interrupting a calculation when the some unsafe
data is present. This is managed with a pair of instructions called:</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>BEGIN-ATOMIC</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>END-ATOMIC</span></p>

<p class=bodytext style='page-break-before:always'><span lang=EN-US>When the
collector runs, it suspends each lisp thread (except itself, which is known to
be in a safe place). It examines each thread, and if any thread is executing an
atomic block, it resumes that thread for a few milliseconds, and then suspends
it again. It continues this until the thread is in a non-atomic instruction
region. The term atomic is used here to mean that the atomic block cannot be
interrupted by the garbage collector. It does not mean that it can’t be
interrupted by another thread. It can. You have to use synchronization objects
to deal with thread interruption issues (which is a different topic).</span></p>

<p class=bodytext><span lang=EN-US>In terms of implementation, a flag in the
control register (the direction flag) is borrowed for use here. If the
direction flag is set (</span><span lang=EN-US style='font-family:"Courier New"'>STD</span><span
lang=EN-US>) then the thread is assumed to be in an atomic block. If it is
cleared (</span><span lang=EN-US style='font-family:"Courier New"'>CLD</span><span
lang=EN-US>) then it is in its normal, non-atomic state. Of course the
direction flag could be used for its intended purpose, such as setting the
direction of repeated </span><span lang=EN-US style='font-family:"Courier New"'>MOV</span><span
lang=EN-US> operations. We get around this by the following:</span></p>

<p class=bodytext><span lang=EN-US>Corman Lisp code never uses the direction
flag for this purpose. Newer processors don’t really get a performance benefit
from using the instructions which pay attention to the direction flag, so we
just avoid it in lisp code and kernel code.</span></p>

<p class=bodytext><span lang=EN-US>Foreign code could still use it, so the
logic the garbage collector uses to determine if an operation is atomic is that
the executing code must be foreign, or else the direction flag clear, otherwise
it assumes the thread is in an atomic block. The way it determines whether
foreign code is executing will be discussed later.</span></p>

<p class=bodytext><span lang=EN-US>Atomic blocks need to be used very
judiciously. Generally, they should never span more than a few instructions,
and another function should never be called within an atomic block. As a
special case, the garbage collector considers entering a function and exiting a
function to be atomic during the time that the stack frame is being created and
freed. The direction flag is not set here—rather the collector examines the
instructions and makes a determination about whether the thread is in either of
these states.</span></p>

<p class=bodytext style='page-break-before:always'><span lang=EN-US>A simple
compiled function:</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>;;;;</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>;;;;    Common
Lisp IDENTITY function.</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>;;;;</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>(defasm
identity (obj)</span></p>

<p class=programsourcenormal><span lang=EN-US style='font-size:10.0pt'>      {</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        push        ebp                     ;;
link new frame</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        mov     ebp,
esp                    </span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        cmp
        ecx, 1                  ;; check number of arguments</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        je
     short :next</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        callp
  _wrong-number-of-args-error</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>    :next</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        mov
        eax, [ebp + ARGS_OFFSET]    ;; return argument in eax</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        mov
        ecx, 1                  ;; returning a single value</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        pop     ebp                     ;;
unlink stack frame</span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        ret</span></p>

<p class=MsoNormal style='margin-bottom:6.0pt'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>    })</span></p>

<p class=bodytext><span lang=EN-US>This is a very simple function which
demonstrates a few important points. The first two instructions link a new
stack frame. These must always be called, in precisely this way, at the start
of any function. They cannot be optimized away, even if you are writing in
assembler, because the garbage collector and lisp debugger rely on an intact linked
list of stack frames. Of course foreign code may not follow this rule—there is
nothing we can do about that. This is handled by marking areas of the stack
that are used by foreign code, and skipping over them.</span></p>

<p class=bodytext><span lang=EN-US>The next two instructions are simply to make
sure that one and only one argument has been passed. These two instructions
could be optimized away for performance reasons, with less safety. The compiler
does just that if you turn up optimize speed and turn down optimize safety
settings.</span></p>

<p class=bodytext><span lang=EN-US>The next instruction fetches the single
argument from the parameter block. The rightmost parameter (in this case the
only one) is always located 8 bytes above </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>EBP</span><span lang=EN-US>
(the constant </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>ARGS_OFFSET</span><span
lang=EN-US> is used to make this clear) with any other arguments continuing at
higher addresses. The first, or leftmost, parameters will be at the highest
address.</span></p>

<p class=bodytext><span lang=EN-US>As an aside: lisp code pushes parameters
from left to right because it is required to evaluate them in that order. As
they are evaluated, the results must be stored somewhere, and the stack is
where they need to be eventually, so this makes the most sense. You might think
they could as easily be stored in the opposite order on the stack, but that’s
not true. If we use a single instruction to allocate a block on the stack for
parameters, then all the bytes in that block are uninitialized until we are
done evaluating and filling in the parameter slots. If garbage collection
occurs here, the uninitialized slots will cause problems. Therefore, we need to
either initialize all the slots immediately, which has a performance cost, or
just push them on the stack as we evaluate them, left to right.</span></p>

<p class=bodytext><span lang=EN-US>After storing the value to be returned in </span><span
lang=EN-US style='font-family:"Courier New"'>EAX</span><span lang=EN-US>, we
set </span><span lang=EN-US style='font-family:"Courier New"'>ECX</span><span
lang=EN-US> to the number of values being returned. In this case this one
instruction is unnecessary, because </span><span lang=EN-US style='font-family:
"Courier New"'>ECX</span><span lang=EN-US> is guaranteed to already contain 1
at this point, so that could be optimized away. Finally the last two
instructions unlink the stack frame and return. These last two instructions are
always required, exactly as presented here. Note that </span><span lang=EN-US
style='font-family:"Courier New"'>ESP</span><span lang=EN-US> must be equal to </span><span
lang=EN-US style='font-family:"Courier New"'>EBP</span><span lang=EN-US> prior
to executing these last two instructions. If it wasn’t you might see </span></p>

<p class=bodytext><span lang=EN-US style='font-family:"Courier New"'>MOV ESP,
EBP</span><span lang=EN-US> </span></p>

<p class=bodytext><span lang=EN-US>prior to the last two instructions.</span></p>

<p class=bodytext><span lang=EN-US>Other things to note:</span></p>

<p class=bodytext><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CALLP</span><span
lang=EN-US> is a lisp assembler macro which translates into an indirect </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>JSR</span><span
lang=EN-US> instruction via the jump table located in the QV vector. You should
always use </span><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>CALLP</span><span
lang=EN-US> and </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>CALLF</span><span lang=EN-US> when calling functions from
assembler code. Normally you will use </span><span lang=EN-US style='font-size:
11.0pt;font-family:"Courier New"'>CALLF</span><span lang=EN-US>, which is the
same, but loads the </span><span lang=EN-US style='font-family:"Courier New"'>EDI</span><span
lang=EN-US> register with the function environment prior to the </span><span
lang=EN-US style='font-size:11.0pt;font-family:"Courier New"'>JSR</span><span
lang=EN-US>. As an optimization, if you know the environment is empty and
unused, you can use </span><span lang=EN-US style='font-size:11.0pt;font-family:
"Courier New"'>CALLP</span><span lang=EN-US> which skips that instruction.</span></p>

<p class=bodytext><span lang=EN-US>Also note: </span><span lang=EN-US
style='font-size:11.0pt;font-family:"Courier New"'>_wrong-number-of-args-error </span><span
lang=EN-US>never returns so we need not be concerned about what happens after
we call it. It ends up calling </span><span lang=EN-US style='font-family:"Courier New"'>ERROR</span><span
lang=EN-US> and returning via a restart. Also note, you should use keywords as
jmp targets. Using the <i>short</i> qualifier in any jump instruction means the
target will be no more than 128 bytes in either direction (actually –128 to
+127 bytes). In this case several bytes are saved in the code.</span></p>

<h1 style='page-break-before:always'><a name="_Toc533948855"><span lang=EN-US>Credits</span></a></h1>

<p class=bodytext><span lang=EN-US>Corman Lisp Credits (updated Dec. 30, 2018)</span></p>

<p class=bodytext><span lang=EN-US>Release 3.1 includes new contributions from
the following people (in alphabetical order):</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=DE>Artem Boldariev (arbv@Github)</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=DE>Chun Tian
(binghe@Github)</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>Luis Cervantes (Luis-Cervantes@Github)</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>Max Chumak</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>Roger Corman
(rgcorman@Github)</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>Zachary Beane
(xach@Github)</span></p>

<p class=bodytext><span lang=EN-US>Release 3.0 includes new contributed work
and assistance by a number of people, including:</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=DE>Edi Weitz</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=DE>Espen Wiborg</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=DE>Karsten Poeck</span></p>

<p class=bodytext><span lang=EN-US>The Corman Lisp compiler, run-time system,
IDE and most associated components and have been developed by Roger Corman.
Several of the included components had other authors, however.</span></p>

<p class=bodytext><span lang=EN-US>Frances Corman is now a part of the Corman
Lisp team, and has revised the manual for this release. Ethan Stone, our senior
software engineer, has made significant contributions to the 3.0 release
including much of the new GUI functionality and the Othello sample game.</span></p>

<p class=bodytext><span lang=EN-US>Edi Weitz has developed the RDNZL package
for Common Lisp .NET integration, and has given us permission to distribute it
with Corman Lisp (see the chapter on Microsoft .NET Integration).</span></p>

<p class=bodytext><span lang=EN-US>Chris Double has a great web site at:</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US><a
href="http://www.double.co.nz/cl/index.htm">http://www.double.co.nz/cl/index.htm</a></span><span
lang=EN-US> </span></p>

<p class=bodytext><span lang=EN-US>which contains all kinds of Corman Lisp
add-on features and programs (which he has personally developed). He continues
to provide excellent support to others, and moderates the Corman Lisp message
board. Many of Chris' works are included, with his permission, with the Corman
Lisp product.</span></p>

<p class=bodytext><span lang=EN-US>Vassili Bykov has provided the sophisticated
C-header parser for loading foreign interface definitions. This is extremely
nice and useful, and is included in full with the Corman Lisp package. He has
also contributed translations of several Windows header files, as well as some
Common Lisp library functions.</span></p>

<p class=bodytext><span lang=EN-US>Reini Urban has done a lot of work to help
make Corman Lisp function as an extension under Autocad. His modifications are
included in this release.</span></p>

<p class=bodytext><span lang=EN-US>The CLOS implementation is derived from the
work of Gregor Kiczales, Jim des Rivières, and Daniel G. Bobrow and is very
well documented in their book <i>Art of the Metaobject Protocol</i>. The code
is Copyright (c) 1990, 1991  Xerox Corporation.</span></p>

<p class=bodytext><span lang=EN-US>The random number facility is from the CMU
Common Lisp project (CMU Lisp) and was originally written by David Adam. </span></p>

<p class=bodytext><span lang=EN-US>Rob MacLachlan also contributed.</span></p>

<p class=bodytext><span lang=EN-US>The LOOP facility is from MIT, and lists
Glenn Burke as one of the authors. See the file LOOP.LISP for more details.</span></p>

<p class=bodytext><span lang=EN-US>Kent Pitman has developed the wonderful
HyperSpec, which can be browsed from within Corman Lisp. This is an incredible
document that covers not only ANSI Common Lisp, but much of the language design
process as well. Thanks for your efforts, Kent. In general, thanks to all the
members of the ANSI Common Lisp standard committee X3J13 for standardizing such
a powerful language.</span></p>

<p class=bodytext><span lang=EN-US>Thanks to Guy Steele Jr., whose books <i>Common
Lisp: The Language</i>, both editions, are a constant source of assistance and
amusement (in the most positive sense). Corman Lisp also includes the optimized
backquote facility from the second edition, as well as some other functions
from the book.</span></p>

<p class=bodytext><span lang=EN-US>Rainer Joswig's e-mail discussions with me
early in the Corman Lisp development inspired several of the features of Corman
Lisp, including the support for OS native threads.</span></p>

<p class=bodytext><span lang=EN-US>Peter Norvig's book <i>Paradigms of
Artificial Intelligence Programming: Case Studies in Common Lisp</i> taught me
a lot about the language and his many sample programs were useful in debugging
the Corman Lisp compiler. The source to his Eliza program is included as an
example with this release.</span></p>

<p class=bodytext><span lang=EN-US>Paul Graham has been an inspiration as well,
through his excellent books <i>ANSI Common Lisp</i> and <i>On Lisp</i>.</span></p>

<p class=bodytext><span lang=EN-US>Source examples are included from numerous
people, including Larry Hunter and Vassili Bykov.</span></p>

<p class=bodytext style='page-break-before:always'><span lang=EN-US>People who
have been influential in my Lisp understanding over the years include:</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>Arthur Hills</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>Jim Bisso</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>David Betz</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>Henry Baker</span></p>

<p class=bodytext style='text-indent:36.0pt'><span lang=EN-US>... and many
others.</span></p>

<p class=bodytext><span lang=EN-US>Thanks also to all the licensed users of
Corman Lisp and PowerLisp, who helped to support me over the years with advice
as well as financial support.</span></p>

<p class=bodytext><span lang=EN-US>Thanks to my wife Frances, children Amy and
Emmett, and grandson Cyrus, for helping me and putting up with me when I have
been unavailable or in need of sleep.</span></p>

<p class=bodytext><span lang=EN-US>-Roger Corman                      September
8, 2006</span></p>

<p class=bodytext><span lang=EN-US><a href="mailto:roger@corman.net">roger@corman.net</a></span></p>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

<p class=bodytext><span lang=EN-US>&nbsp;</span></p>

</div>

</body>

</html>
